基本词源于R而不是根词

时间:2011-07-12 13:02:03

标签: r nlp stemming

在使用R中的NLP进行词干化时,有没有办法获得基本词而不是词根?

代码:

> #Loading libraries
> library(tm)
> library(slam)
> 
> #Vector
> Vec=c("happyness happies happys","sky skies")
> 
> #Creating Corpus
> Txt=Corpus(VectorSource(Vec))
> 
> #Stemming
> Txt=tm_map(Txt, stemDocument)
> 
> #Checking result
> inspect(Txt)
A corpus with 2 text documents

The metadata consists of 2 tag-value pairs and a data frame
Available tags are:
  create_date creator 
Available variables in the data frame are:
  MetaID 

[[1]]
happi happi happi

[[2]]
sky sky

> 

我可以使用R为“happyness happies happys”获得基本单词“happy”(基本单词)而不是“happi”(根单词)。

4 个答案:

答案 0 :(得分:2)

你可能正在寻找一个干扰器。 以下是CRAN Task View: Natural Language Processing的一些词干分析器:

  • RWeka是Weka的接口,它是用Java编写的数据挖掘任务的机器学习算法的集合。在自然语言处理的上下文中特别有用的是它的标记化和词干化功能。

  • Snowball提供了Snowball词干分析器,其中包含Porter词干分析器和其他几种用于不同语言的词干分析器。有关详细信息,请参阅Snowball网页。

  • Rstem是Porter的词干算法的C版本的替代界面。

答案 1 :(得分:1)

如果没有良好的英语形态学知识,就必须使用现有的库,而不是创建自己的词干分析器。

英语中充满了意想不到的形态意外,这些意外会影响概率模型和基于规则的模型。一些例子是:

  • 删除 in - 前缀以删除 -able 后缀,例如可居住的
  • 更改单词的类别,如阻止动词骑自行车所引起的名词自行车(可以影响基于类别的规则)。
  • 具有否定含义的字词不能带有负前缀(您可以不好,但不能 unugly )。
  • 两个单词作为复合词,如卡车司机" (当你干的时候,你会把它们当作一个词)。

英语也有I-umlaut的问题,其中像男人,鹅,脚,最好的,以及许多其他单词(都具有'类似的声音)这样的单词不容易被阻止。阻止外来的借词,如自动机,也可能是一个问题。

阻止最高级形式是例外的一个很好的例子:

最好 - >好

eldest - >

一个lemmatizer会解释这种例外情况,但速度会慢一些。您可以查看Porter干扰器规则以了解您的需求,或者您可以使用其SnowballC R包。

答案 2 :(得分:0)

stemCompletion可以在这里使用。这不是最好的,但可以管理。

Stemm = tm_map(Txt, stemCompletion, dictionary=Txtt)
inspect(Stemm)

A corpus with 2 text documents

The metadata consists of 2 tag-value pairs and a data frame
Available tags are:
  create_date creator 
Available variables in the data frame are:
  MetaID 

[[1]]
happyness happies happies

[[2]]
sky sky

答案 3 :(得分:-1)

当我需要做类似的事情时,我在文本文件中写出了我的单词列表,并将其提供给英语Lexicon Project的Web查询工具,然后将结果解析回R.有点笨重,但很多ELP提供了良好的数据。 供您使用,请查看ELP的MorphSP。为了幸福,它给了{happy}> ness>

http://elexicon.wustl.edu/query14/query14.asp