文からキーテキストを抽出する一般的なアプローチ(nlp)


27

次のような文が与えられた場合:

Complimentary gym access for two for the length of stay ($12 value per person per day)

ジムやジムへのアクセスという言葉を識別するために、どのような一般的なアプローチをとることができますか?


Termine、およびプロジェクトに関連する論文をご覧ください:nactem.ac.uk/software/termine
MrMeritology

回答:


30

浅いN atural Lの anguageのP rocessing技術は、文章から概念を抽出するために使用することができます。

-------------------------------------------

浅いNLPテクニックの手順:

1)文を小文字に変換します

2)ストップワードを削除します(これらは言語でよく見られる単語です。for、very、and、of、areなどの単語は一般的なストップワードです)

3)n-gram、つまりテキストの特定のシーケンスからn個のアイテムの連続したシーケンスを抽出します(nを増やすだけで、モデルを使用してより多くのコンテキストを格納できます)

4)構文ラベル(名詞、動詞など)を割り当てます

5)セマンティック/構文解析アプローチによるテキストからの知識抽出、すなわち名詞/動詞のような文でより高い重みを保持する単語を保持しようとする

-------------------------------------------

上記の手順を特定の文に適用した結果を調べてみましょうComplimentary gym access for two for the length of stay ($12 value per person per day)

1グラムの結果:ジム、アクセス、長さ、滞在、価値、人、日

Summary of step 1 through 4 of shallow NLP:

1-gram          PoS_Tag   Stopword (Yes/No)?    PoS Tag Description
-------------------------------------------------------------------    
Complimentary   NNP                             Proper noun, singular
gym             NN                              Noun, singular or mass
access          NN                              Noun, singular or mass
for             IN         Yes                  Preposition or subordinating conjunction
two             CD                              Cardinal number
for             IN         Yes                  Preposition or subordinating conjunction
the             DT         Yes                  Determiner
length          NN                              Noun, singular or mass
of              IN         Yes                  Preposition or subordinating conjunction
stay            NN                              Noun, singular or mass
($12            CD                              Cardinal number
value           NN                              Noun, singular or mass
per             IN                              Preposition or subordinating conjunction
person          NN                              Noun, singular or mass
per             IN                              Preposition or subordinating conjunction
day)            NN                              Noun, singular or mass

Step 4: Retaining only the Noun/Verbs we end up with gym, access, length, stay, value, person, day

nを増やしてより多くのコンテキストを保存し、ストップワードを削除しましょう。

2グラムの結果:無料のジム、ジムへのアクセス、長期滞在、滞在価値

Summary of step 1 through 4 of shallow NLP:

2-gram              Pos Tag
---------------------------
access two          NN CD
complimentary gym   NNP NN
gym access          NN NN
length stay         NN NN
per day             IN NN
per person          IN NN
person per          NN IN
stay value          NN NN
two length          CD NN
value per           NN IN

Step 5: Retaining only the Noun/Verb combination we end up with complimentary gym, gym access, length stay, stay value

3グラムの結果:ジムへの無料アクセス、長期滞在価値、1日1人

Summary of step 1 through 4 of shallow NLP:

3-gram                      Pos Tag
-------------------------------------
access two length           NN CD NN
complimentary gym access    NNP NN NN
gym access two              NN NN CD
length stay value           NN NN NN
per person per              IN NN IN
person per day              NN IN NN
stay value per              NN NN IN
two length stay             CD NN NN
value per person            NN IN NN


Step 5: Retaining only the Noun/Verb combination we end up with complimentary gym access, length stay value, person per day

覚えておくべきこと:

ツール:

品詞タグ付けにOpenNLP / StanfordNLPの使用を検討できます。ほとんどのプログラミング言語には、OpenNLP / StanfordNLPのサポートライブラリがあります。快適さに基づいて言語を選択できます。以下は、PoSタグ付けに使用したサンプルRコードです。

サンプルRコード:

Sys.setenv(JAVA_HOME='C:\\Program Files\\Java\\jre7') # for 32-bit version
library(rJava)
require("openNLP")
require("NLP")

s <- paste("Complimentary gym access for two for the length of stay $12 value per person per day")

tagPOS <-  function(x, ...) {
  s <- as.String(x)
    word_token_annotator <- Maxent_Word_Token_Annotator()
    a2 <- Annotation(1L, "sentence", 1L, nchar(s))
    a2 <- annotate(s, word_token_annotator, a2)
    a3 <- annotate(s, Maxent_POS_Tag_Annotator(), a2)
    a3w <- a3[a3$type == "word"]
    POStags <- unlist(lapply(a3w$features, `[[`, "POS"))
    POStagged <- paste(sprintf("%s/%s", s[a3w], POStags), collapse = " ")
    list(POStagged = POStagged, POStags = POStags)
  }

  tagged_str <-  tagPOS(s)
  tagged_str

#$POStagged
#[1] "Complimentary/NNP gym/NN access/NN for/IN two/CD for/IN the/DT length/NN of/IN stay/NN $/$ 12/CD value/NN per/IN     person/NN per/IN day/NN"
#
#$POStags
#[1] "NNP" "NN"  "NN"  "IN"  "CD"  "IN"  "DT"  "NN"  "IN"  "NN"  "$"   "CD" 
#[13] "NN"  "IN"  "NN"  "IN"  "NN" 

シャロー&ディープNLPに関する追加資料:


優れた回答(+1)。提案の1つ:可能であれば、文献を提供するか、少なくとも言及したシャローNLPテクニックの一般的なリファレンスを提供します。
アレクサンドルブレフ

1
どうもありがとうございます。2つの質問、nltkでこれを実行できますか?tf-idfを使用して同じことを行い、最もユニークな単語(最高スコア)をキーワードとして使用できますか?
ウィリアムファルコン

@ Aleksandr Blekh、ありがとう。浅いNLPと深いNLPについてさらに学習するために、追加の読書リンクを追加しました。これが役立つことを願って
マノハールスワミナサン

@ウィリアムファルコン、ありがとう。1)はい、nltkを使用できます。2)ドキュメントレベルで概念またはテーマを見つけようとしている場合は、TF-IDFを使用できます。
マノハールスワミナサン

3

文の構造分析し、対応する構文カテゴリを抽出する必要があります(この場合、名詞句、つまり句のカテゴリになると思います)。詳細については、対応するウィキペディアの記事とNLTK本の「文章構造の分析」の章を参照してください。

上記のアプローチを実装するために利用可能なソフトウェアツールに関しては、NLTK(Pythonを好む場合)またはStanfordNLPソフトウェア(Javaを好む場合)を検討することをお勧めします。他の多くのNLPフレームワーク、ライブラリ、およびプログラミング言語のサポートについては、この優れたキュレーションリストの対応する(NLP)セクションを参照してください。


0

Rユーザーの場合、http://www.rdatamining.comに多くの実用的な情報があります。彼らのテキストマイニングの例を見てください。
また、tmパッケージを見てください。
これは優れた集約サイトでもあります -http : //www.tapor.ca/


リンクは、このサイトの有効な回答とはみなされません。投稿の元の質問に回答し、リンクを使用して回答を補足してください。
シェルドンクレガー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.