将复数名词转换为单数名词

11

如何使用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

1
感谢Aleksandar Dimitrov和tchrist的评论。也许我必须编写自己的单数规则。以下是一份有用的在线材料,适用于所有对此问题感兴趣的人:英语复数形式的算法方法。如果还有其他答案,请指导我。谢谢。 - ssuhan
参见:https://github.com/hrbrmstr/pluralize - Dave Jarvis
参见:https://github.com/trinker/qdap/blob/master/R/add_s.R(基础版)。 - Dave Jarvis
1个回答

6

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

如果你正在进行标记,德国项目TreeTagger可以同时进行标记和词形还原。

编辑:tchrist提醒我说,无论你的目的是什么,如果你真的在寻找复数名词的单数表面形式,自己编写的解决方案根本行不通。

如果你不需要,Neo_Me(评论中)似乎在R中找到了一个可以进行词干提取的包:snowball(RStem似乎已经停止更新。据我所知,Snowball取代了它。)

当然,这只是一个实现或包装器,围绕着波特词干算法。使用时要自担风险,它会将像wives这样的词缀提取成wif之类的形式。

我突然想到,R有CRAN。在那里搜索“lemma”让我意识到有一个依赖于Java的wordnet包。它似乎有一个getLemma函数。整个包可能对你来说太过复杂,但如果你找不到更好的东西,它仍然可能帮助你。

2
英语有成千上万的不规则复数形式,Porter Stemmer和Snowball都无法很好地处理它们。它们在具有古典词尾变化的单词(如bacterium/bacteria和criterion/criteria)方面尤其无能。你必须编写自己的规则。请注意,仅仅从像technologies或wolves这样的简单单词中去掉s是错误的。 - tchrist
最好的方法是在这种情况下使用词干提取器。你应该研究一下 tmRStem 这两个包。 - Shreyas Karnik
tchrist,你是对的,我没有表达清楚“自己动手”会是一个坏主意。如果你想要的是一个搜索引擎,这可能是一个足够的想法。但从语言学角度来看,它是不准确的。 - Aleksandar Dimitrov
Neo_Me:我不同意使用词干提取器的建议,因为它会遇到tchrist已经提到的相同问题:如果你不需要精确的结果,那么这很好,但是如果你真的想要提供复数名词的确切单数形式,词干提取器将做得非常糟糕。当然,我还没有看过tm或RStem(而且不太可能看,因为我不用R进行语言学)。 - Aleksandar Dimitrov
词干处理器确实不太够用。 OP 需要一个词形还原器,例如 WordNet 中的或 Stanford POS 标记器中的那个。 - Fred Foo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接