0

下面是我如何阻止我的语料库和我的文件。然而,例如“工作”和“工作”出现了大量的时间,在我的分析中,对于所有意图和目的来说,这些显然是同一个词。是否有一个包或一些代码片段来删除“-ed”结尾?谢谢!

library(tm)
docs<-Corpus(DirSource(cname))

summary(docs)

library(SnowballC)   
docs <- tm_map(docs, stemDocument) 
4

1 回答 1

2

这是一个您可能认为的更复杂的问题。

如果您使用词干提取,则 ed 将从单词中删除,而不考虑单词的含义或上下文。因此,您可以将许多过去时词简化为它们的词根,或将复数形式简化为单数。

但是,您也可能会丢失上下文。词的真正词根,词位,有它自己的含义,它有时会在词干中丢失,因为不同的词是从同一个词根演变而来的。

想象一下,您以复数形式阻止并删除了 s:

所以在这句话中……“她走得很慢。”

而这句话……“他们来自各行各业。”

...你得到这个词walk

尽管它们是从同一个词根演变而来的,但它们具有不同的词汇含义,并且对第二个版本的词干会造成上下文不匹配。

在这种情况下,词形还原将是一个更好的选择(如果算法是可靠的并且适合您的语料库),因为它将保留两个不同单词明显相同背后的词位的潜在含义。

词根化与词干提取不同,后者使用上下文来尝试确定词根的含义是什么,它的词位,而词干提取只是修剪回假定的词根。

对于真正敏感的用途,它可能是必要的。但如果处理不当,它在大型语料库中也经常不会更准确。

如果上下文很重要,请尝试 Wordnet 词形还原包:

R 的 Wordnet

如果您只需要词干提取,请尝试以最简单的形式使用雪球,看看它是否能满足您的需求:

docsStemmed<-wordStem(docs, language = "english")

从“SnowballC”包中,请注意您的文档必须位于字符向量中才能以这种方式返回另一个词干向量。它应该删除过去时的结尾。tm如上所示,您可以使用它 。

如果您使用该方法没有得到您想要的结果,您可能需要在词干提取之前对语料库进行更多的修饰。

  • 将其缩小为小写。
  • 去掉标点符号。
  • 转换为纯文本。
  • 清除表情符号和任何奇怪的不合格符号。

一旦你的文档结构正确,词干提取就会更加可靠。如果您需要帮助并tm尝试SnowballC筛选此处的方法并使用这些方法搜索堆栈以获得清晰性。:

tm & SnowballC 文档

于 2017-03-01T04:47:35.210 回答