这是一个您可能认为的更复杂的问题。
如果您使用词干提取,那么 ed 将从单词中删除,而不考虑单词的含义或上下文。因此,您可以将许多过去时词简化为它们的词根,或将复数形式简化为单数。
但是,这样做也可能会丢失上下文。词的真正词根,词位,有它自己的含义,有时它会在词干中丢失,因为不同的词是从同一个词根演变而来的。
想象一下你把复数的 s 删掉了:
所以在这句话中...
“她走得很慢。”
这句话...
“他们来自各行各业。”
...你会听到 walk 这个词。
虽然它们是从同一个词根演变而来的,但它们具有不同的词汇含义,并且对第二个版本的词干会造成上下文不匹配。
在这种情况下,词形还原将是更好的选择(如果算法可靠且适合您的语料库),因为它会保留两个不同单词明显相同背后的词位的潜在含义。
词根化与词干提取不同,后者使用上下文来尝试确定词根的含义,即其词位,而词干提取只是修剪回假定的词根。
对于真正敏感的用途,它可能是必要的。但如果处理不当,它在大型语料库中也经常不会更准确。
如果上下文很重要,请尝试 Wordnet 词形还原包:
Wordnet for R
如果您只需要词干提取,请尝试以最简单的形式使用雪球,看看它是否能满足您的需求:
docsStemmed<-wordStem(docs, language = "english")
从“SnowballC”包中,请注意您的文档必须位于字符向量中才能以这种方式返回另一个词干向量。它应该删除过去时的结尾。如上所示,您可以将其与tm 一起使用。
如果您使用该方法没有得到您想要的结果,您可能需要在词干提取之前对语料库进行更多的修饰。
- 将其缩减为小写。
- 删除标点符号。
- 转换为纯文本。
- 清除表情符号和任何奇怪的不合格符号。
一旦文档结构正确,词干提取就会更加可靠。如果您需要有关 tm 和 SnowballC 的帮助,请尝试筛选此处的方法并使用这些方法搜索堆栈以确保清晰。:
tm & SnowballC docs