この質問は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")
へ)。
こんにちはあなたはパッケージを試すことができます 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
列を参照してください。
以前の投稿で述べたように、Rパッケージのtextstemの関数lemmatize_words()はこれを実行して、私が理解していることを希望の結果として提供します。
library(textstem)
vector <- c("run", "ran", "running")
lemmatize_words(vector)
## [1] "run" "run" "run"
@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()が引数として受け取るオブジェクトのタイプではありません)。
お役に立てれば!
たぶん stemming で十分でしょうか?典型的な自然言語処理タスクは、語幹テキストを処理します。 NLPのCRANタスクビューからいくつかのパッケージを見つけることができます: http://cran.r-project.org/web/views/NaturalLanguageProcessing.html
本当にもっと複雑なものが必要な場合は、文をニューラルネットにマッピングすることに基づく特別なソリューションがあります。私の知る限り、これらには大量のトレーニングデータが必要です。 Stanford NLP Group が作成し、提供しているオープンソフトウェアはたくさんあります。
本当にトピックを掘り下げたい場合は、同じスタンフォードNLPグループ publications セクションでリンクされているイベントアーカイブを掘り下げることができます。このトピックに関する本もいくつかあります。
連想化は、RでtextStemパッケージを使用して簡単に実行できます。
手順は次のとおりです。
1)textstemをインストールします
2)library(textstem)
でパッケージをロードします
3)stem_Word=lemmatize_words(Word, dictionary = Lexicon::hash_lemmas)
ここで、stem_Wordは見出し語化の結果であり、Wordは入力Wordです。