如何在R中执行词形还原?

Str*_*keR 20 nlp r lemmatization

这个问题可能是R或python中Lemmatizer的复制品(am,are,is - > be?),但是我再次添加它,因为前一个关闭它说它太宽泛而且它唯一的答案不是高效(因为它为此访问一个外部网站,这太慢了,因为我有非常大的语料库来找到lemmas).因此,这个问题的一部分将与上述问题类似.

根据维基百科,词形还原定义为:

语言学中的Lemmatisation(或词形还原)是将单词的不同变形形式组合在一起的过程,以便将它们作为单个项目进行分析.

一个简单的谷歌搜索R中的词形还原只会指向R 的包wordnet.当我尝试这个包期望c("run", "ran", "running")输入到词形化函数的字符向量时c("run", "run", "run"),我看到这个包只提供类似grepl功能的功能通过各种过滤器名字和字典.

wordnet包中的示例代码,最多提供以"car"开头的5个单词,因为过滤器名称解释了自己:

filter <- getTermFilter("StartsWithFilter", "car", TRUE)
terms <- getIndexTerms("NOUN", 5, filter)
sapply(terms, getLemma)
Run Code Online (Sandbox Code Playgroud)

以上不是我正在寻找的词形还原.我正在寻找的是,使用R我想找到的话,真正的根源:(对于例如,从c("run", "ran", "running")c("run", "run", "run")).

Vic*_*orp 28

你好,你可以试试koRpus允许使用Treetagger的包:

tagged.results <- treetag(c("run", "ran", "running"), treetagger="manual", format="obj",
                      TT.tknz=FALSE , lang="en",
                      TT.options=list(path="./TreeTagger", preset="en"))
tagged.results@TT.res

##     token tag lemma lttr wclass                               desc stop stem
## 1     run  NN   run    3   noun             Noun, singular or mass   NA   NA
## 2     ran VVD   run    3   verb                   Verb, past tense   NA   NA
## 3 running VVG   run    7   verb Verb, gerund or present participle   NA   NA
Run Code Online (Sandbox Code Playgroud)

请参阅lemma列,了解您要求的结果.


And*_*ndy 11

正如之前提到的那样,R包文本中的函数lemmatize_words()可以执行此操作并为您提供我理解为您期望的结果:

library(textstem)
vector <- c("run", "ran", "running")
lemmatize_words(vector)

## [1] "run" "run" "run"
Run Code Online (Sandbox Code Playgroud)


Har*_*hit 6

@Andy和@Arunkumar说textstem库可用于执行词干和/或词义化时是正确的。但是,lemmatize_words()仅适用于单词向量。但是在语料库中,我们没有单词的向量;我们有字符串,每个字符串都是文档的内容。因此,要对语料库执行词法语义化,可以使用lemmatize_strings()函数作为tm软件包的tm_map()的参数。

> corpus[[1]]
[1] " earnest roughshod document serves workable primer regions recent history make 
terrific th-grade learning tool samuel beckett applied iranian voting process bard 
black comedy willie loved another trumpet blast may new mexican cinema -bornin "
> corpus <- tm_map(corpus, lemmatize_strings)
> corpus[[1]]
[1] "earnest roughshod document serve workable primer region recent history make 
terrific th - grade learn tool samuel beckett apply iranian vote process bard black 
comedy willie love another trumpet blast may new mexican cinema - bornin"
Run Code Online (Sandbox Code Playgroud)

进行完词条化后,请不要忘记运行以下代码行:

> corpus <- tm_map(corpus, PlainTextDocument)
Run Code Online (Sandbox Code Playgroud)

这是因为为了创建文档术语矩阵,您需要具有“ PlainTextDocument”类型的对象,该对象在使用lemmatize_strings()之后会发生更改(更具体地说,语料库对象不包含内容和元数据每个文档-现在只是一个包含文档内容的结构;这不是DocumentTermMatrix()作为参数的对象类型)。

希望这可以帮助!