【问题标题】:Convert plural nouns into singular nouns将复数名词转换为单数名词
【发布时间】:2011-08-12 07:29:59
【问题描述】:

如何使用R将复数名词转换为单数名词?我使用 tagPOS 函数标记每个文本,然后提取所有标记为“NNS”的复数名词。但是,如果我想将这些复数名词转换为单数,该怎么办?


library("openNLP")
library("tm")
acq_o <- "Gulf Applied Technologies Inc said it sold its subsidiaries engaged in pipelines and terminal operations for 12.2 mln dlrs. The company said the sale is subject to certain post closing adjustments, which it did not explain. Reuter."

acq = tm_map(Corpus(DataframeSource(data.frame(acq_o))), removePunctuation)
acqTag <- tagPOS(acq)
acqTagSplit = strsplit(acqTag," ")
qq = 0
tag = 0
for (i in 1:length(acqTagSplit[[1]])){
        qq[i] <-strsplit(acqTagSplit[[1]][i],'/')
        tag[i] = qq[i][[1]][2]
}

index = 0
k = 0
for (i in 1:(length(acqTagSplit[[1]]))) { 
    if (tag[i] == "NNS"){
        k = k +1             
        index[k] = i     
    } 
}
index

【问题讨论】:

  • 感谢 Aleksandar Dimitrov 和 tchrist 的 cmets。也许我必须编写自己的单数化规则。对于对此问题感兴趣的每个人,这里有一个有用的在线材料:英语复数的算法方法。如果有进一步的答案,请指导我。谢谢

标签: r nlp


【解决方案1】:

我相信您可以通过外部程序管道传输您的数据,或使用它预处理您的数据。

如果您仍然要进行标记,德国项目TreeTagger 可以同时进行标记和词形还原。

编辑:tchrist 提醒我是对的,无论您的目的是什么,如果您实际上是在寻找复数名词的单数表面形式,那么寻求自制解决方案根本不会削减它。

如果你不这样做,那么 Neo_Me(同样,在 cmets 中)似乎找到了一个以 R 为词干的包:包 snowball(RStem 似乎已经停产。AFAICT,Snowball 取代了它。)

当然,这只是 Porter 词干分析器的一个实现或包装。使用风险自负,它将把 wives 之类的东西变成 wif 或类似的东西。

我突然想到,R 有CRAN。在那里寻找“引理”让我意识到依赖于 Java 的包 wordnet。它似乎有一个getLemma 功能。整个包对你来说可能是多余的,但如果你找不到更好的东西,它仍然可以让你到达某个地方。

【讨论】:

  • 英语实际上有成千上万个不规则复数形式,无论是 Porter Stemmer 还是 Snowball 都不能很好地处理它们。它们尤其不适合带有经典变形的词,例如 bacterium/bacteriacriterion/criteria。 你必须编写自己的规则。请注意,简单地从 technologieswolves 之类的简单词中去掉 s 是错误的。
  • 在这种情况下最好使用 Stemmer。 tm RStem 是您应该查看的软件包。
  • tchrist,你是对的,我没有说得足够清楚,“滚动你自己的”将是一个坏主意。如果您想要的是搜索引擎,这可能是一个足够的想法。但这在语言上是不准确的。
  • Neo_Me:我不同意词干分析器的建议,因为它会遇到 tchrist 已经提到的同样问题:如果你不需要准确的结果就足够了,但如果你真的瞄准 i> 为了提供复数名词的精确单数形式,词干分析器将在这方面做得非常糟糕。诚然,我还没有研究过 tm 或 RStem(而且不太可能这样做,因为我不将 R 用于语言学。)
  • Stemmers 真的不会削减它。 OP 需要一个词形还原器,就像 WordNet 中的那个或斯坦福 POS 标记器中的那个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多