r - R 词干中的 SnowballC "many"和 "only"

标签 r machine-learning nlp tm

我正在使用 SnowballC 处理文本文档,但意识到它会词干诸如“many”和“only”之类的单词,即使它们不应该被词干。

> library(SnowballC)
> 
> str <- c("many", "only", "things")
> str.stemmed <- stemDocument(str)
> str.stemmed
[1] "mani"  "onli"  "thing"
> 
> dic <- c("many", "only", "online", "things")
> str.complete <- stemCompletion(str.stemmed, dic)
> str.complete
    mani     onli    thing 
      "" "online" "things" 

你可以看到,词干提取后,“many”和“only”变成了“mani”和“onli”,之后无法用stemCompletion补全回来,因为“many”中的字母不包含“mani”。请注意“onli”如何完成为“online”而不是原来的“only”。

这是为什么呢?这是解决这个问题的方法吗?

最佳答案

词干提取通常作为一组规则来执行,即从单词中剥离所有词缀(包括派生词缀和屈折变化词缀),留下其词根。词形还原通常仅删除屈折词缀。词干提取是词形还原的更激进的版本。鉴于您想要什么,您似乎更喜欢词形还原。

为了比较两者,大多数词形还原器仅限于处理英语中名词和动词词缀的一些规则 --ed-s>-ing,例如。他们必须处理一些不规则的情况,但通过一些训练数据,可能可以涵盖许多情况。

词干分析者预计会进行更深入的挖掘。因此,他们可以进行的可能转换的空间更大,因此您更有可能最终出现错误。

要了解数据中发生的情况,让我们看看具体情况。

online -> onli:到底为什么会发生这种情况?对此不太确定;可能有一些规则试图迎合像 medic-inemedic 这样的词>-alsub-ma​​ri-nemari- neimagi-neimagi-国家。

only -> onli, many -> mani:这些看起来特别奇怪,但可能更比之前的规则合理——尤其是在处理以 -ed 结尾的动词时。如果您要词干否认研究修改指定,您会希望它们是相当于它们的未变形形式拒绝研究修改指定。 您可以制定规则将每个动词转换为未变形的形式,但作者选择将词根设为以 -i 结尾的形式。为了确保这些匹配,-y 结尾也必须转换为 -i

使用词形还原器,您可能会得到更可预测的结果。由于它们只删除屈折词缀,因此您将获得onlymanyonlinething,因为您通缉。好的词干分析器和词形还原器都可以很好地工作,但是词干分析器要做更多的事情,因此有更多的错误空间。

关于r - R 词干中的 SnowballC "many"和 "only",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29925840/

相关文章:

r - R中的set.seed的参数

python - 如何提高前馈神经网络的准确性?

python - 逆文档频率公式

r - ggplot geom_point 绘制两个分类变量并填充缺失

R Shiny with Leaflet - 单击后更改标记的颜色

r - 在Rcpp中用省略号传递许多参数(...)

R机器学习包处理大量级别的因素

python - SHAP - 具有多个维度的实例

python - 使用 nlp/spacy 查找相似之处

nlp - 难以理解 Roberta 模型中使用的分词器