検索テキストのトークン化に適した手法


8

検索エンジンが行うのと同じまたは同様の方法で一部のテキストをトークン化する方法を探しています。

これを行う理由は、トークンに対して統計分析を実行できるようにするためです。私たちが使用している言語はpythonであるため、その言語で機能するテクニックを好みますが、必要に応じて別の言語を使用するように設定することもできます。

元のトークン:

私たちはいくつかの素晴らしいブリトーを持っています!

より簡略化:(複数形と句読点を削除)

私たちはいくつかの素晴らしいブリトーを持っています

さらに簡略化:(余分な単語を削除)

素晴らしいブリトー

最良:(肯定的および否定的な意味を認識する):

ブリトー-ポジティブ-

パーサーコンビネーターを調べてください。これはpython valuedlessons.com/2008/02/のパーサーコンビネーターライブラリです。他のpyparsing.wikispaces.comパーサーコンビネーターでは、正規表現に似たマッチ試行に基づいて、ほとんどDSLに似たアプローチでパースできますが、はるかに柔軟です/パワフル
Jimmy Hoffa

頭に浮かぶもう1つのアプローチ(ただし、少しおもしろい感じがします...)は、1つのテーブルに必要な一意のトークンがあるトークンデータベースを作成し、トークンを削除するためのブラックリストテーブルとホワイトリストを作成することです。多くのトークンを、必要なトークン内のトークンレコードの1つにマップするIDを持っている、重複トークンのテーブル。基本的に、必要な2つの言語間で翻訳する辞書データベースです。一方の言語は、「素晴らしい」「素晴らしい」「素晴らしい」がすべて「-positive-」で同じものに翻訳される最小化された語彙です
Jimmy Hoffa

回答:


7

Pythonには優れた自然言語ツールキットであるNLTKがあります。それは箱から出して単語のトークン化をサポートします:

>>> import nltk
>>> input = 'We have some great burritos!'
>>> tokens = nltk.word_tokenize(input)
>>> tokens
['We', 'have', 'some', 'great', 'burritos', '!']
>>> nltk.pos_tag(tokens)
[('We', 'PRP'), ('have', 'VBP'), ('some', 'DT'), ('great', 'JJ'), ('burritos', 'NNS'), ('!', '.')]

最後の構造には自然言語タグが含まれており、分類に基づいて単語を検討対象から除外できます。JJ(形容詞)とNN-prefixed(名詞)のタグに焦点を当てたいと思います。

そこから先は、ステミングを適用し、正と負の形容詞を検出できます。

ただし、形容詞の分類では、このようなオンラインリソースから独自のコーパスを作成する必要があると思います。ライブラリはこのためのツールを提供します。

以下は、Porterステミングアルゴリズムを使用したステミングの例です。

>>> from nltk.stem.porter import PorterStemmer
>>> PorterStemmer().stem('burritos')
'burrito'

O'Reillyが図書館で本を出版し、オンラインで入手できるようになりました

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.