web-dev-qa-db-ja.com

Rで見出し語化を行う方法は?

この質問はLemmatizer in Rまたはpython(am、are、is-> be?)の重複の可能性がありますが、私はm前のものが広すぎて、それが持っている唯一の答えが効率的ではないと言って閉じられたので、もう一度追加します(これは外部ウェブサイトにアクセスするので、非常に大きなコーパスで補題を見つけることができないため遅くなります)。 。したがって、この質問の一部は上記の質問と同様になります。

ウィキペディアによると、見出し語化は次のように定義されています。

言語学における見出し語化(または見出し語化)は、単語のさまざまな活用形をグループ化して、それらを単一の項目として分析できるようにするプロセスです。

Rでの見出し語化の単純なGoogle検索はonlyが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)
_

上記は[〜#〜] not [〜#〜]私が探している見出し語化です。私が探しているのは、Rを使用することです。単語の真の語根を見つけたいです(たとえば、c("run", "ran", "running")からc("run", "run", "run")へ)。

22
StrikeR

こんにちはあなたはパッケージを試すことができます 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"))
[email protected]

##     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

求めている結果については、lemma列を参照してください。

29
Victorp

以前の投稿で述べたように、Rパッケージのtextstemの関数lemmatize_words()はこれを実行して、私が理解していることを希望の結果として提供します。

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

## [1] "run" "run" "run"
13
Andy

@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"

見出し語化を行った後、次のコード行を実行することを忘れないでください。

> corpus <- tm_map(corpus, PlainTextDocument)

これは、ドキュメントタームマトリックスを作成するために、lemmatize_strings()を使用した後に変更される 'PlainTextDocument'タイプのオブジェクトが必要なためです(より具体的には、コーパスオブジェクトにはコンテンツとメタデータが含まれていません)各ドキュメントはもう-これはドキュメントのコンテンツを含む単なる構造になりました;これはDocumentTermMatrix()が引数として受け取るオブジェクトのタイプではありません)。

お役に立てれば!

6
Harshit

たぶん stemming で十分でしょうか?典型的な自然言語処理タスクは、語幹テキストを処理します。 NLPのCRANタスクビューからいくつかのパッケージを見つけることができます: http://cran.r-project.org/web/views/NaturalLanguageProcessing.html

本当にもっと複雑なものが必要な場合は、文をニューラルネットにマッピングすることに基づく特別なソリューションがあります。私の知る限り、これらには大量のトレーニングデータが必要です。 Stanford NLP Group が作成し、提供しているオープンソフトウェアはたくさんあります。

本当にトピックを掘り下げたい場合は、同じスタンフォードNLPグループ publications セクションでリンクされているイベントアーカイブを掘り下げることができます。このトピックに関する本もいくつかあります。

4
LauriK

連想化は、RでtextStemパッケージを使用して簡単に実行できます。
手順は次のとおりです。
1)textstemをインストールします
2)library(textstem)でパッケージをロードします
3)stem_Word=lemmatize_words(Word, dictionary = Lexicon::hash_lemmas)
ここで、stem_Wordは見出し語化の結果であり、Wordは入力Wordです。

0
Arunkumar CR