3

タグ クラウドを準備するために、テキストから最も関連性の高い単語を取得したいと考えています。

scikit-learn パッケージの CountVectoriser を使用しました。

cv = CountVectorizer(min_df=1, charset_error="ignore",
    stop_words="english", max_features=200)

単語と頻度を教えてくれるので、これはいいですね:

counts = cv.fit_transform([text]).toarray().ravel()
words = np.array(cv.get_feature_names())

頻度の低い単語を除外できます。

words = words[counts > 1]
counts = counts[counts > 1]

数字である言葉と同様に:

words = words[np.array(map(lambda x: x.isalpha(), words))]
counts = counts[np.array(map(lambda x: x.isalpha(), words))]

しかし、まだ完璧ではありません...

私の質問は次のとおりです。

  1. 動詞を除外するには?
  2. 同じ単語の異なる形式を取り除くためにステミングを実行する方法は?
  3. CountVectoriser を呼び出して 2 文字の単語を除外する方法は?

次の点にも注意してください。

  1. 私はnltkで問題ありませんが、「nltkを試してみてください」のような答えは答えではありません。コードを教えてください。
  2. モデルのトレーニングを必要とするベイジアン分類器やその他の手法は使用したくありません。私には時間がありませんし、分類器をトレーニングするための例もありません。
  3. 言語は英語です
4

1 に答える 1

6

1-動詞を除外する方法は?

サポートする言語によって異なります。良い文と単語のトークナイザーのペアと品詞のタガーが必要になります。3つのコンポーネントはすべて、一般的に機械学習モデルを使用して実装されます(ただし、ルールベースの文と単語のトークナイザーで良好な結果を得ることができます)。英語のみをサポートしたい場合は、nltkで事前にトレーニングされたモデルを見つけることができますが、私は専門家ではないため、ドキュメントとチュートリアルを読む必要があります:)

テキストを文と単語に分割し、動詞を識別して削除する方法を理解したら、それをPython関数としてラップし、CountVectorizerコンストラクターに渡すことができます。以下を参照してください。

2-同じ単語のさまざまな形を取り除くためにステミングを実行する方法は?

トークンの抽出、ステミング、およびオプションでフィルタリングの両方を同時に処理するには、コンストラクターに呼び出し可能なカスタムtokenizerPythonを渡す必要があります。CountVectorizerこれはドキュメントで説明されています。

語幹自体については、サポートする言語によって異なりますが、http://nltk.org/api/nltk.stem.htmlから始めることができます。

ステマーをより自然に接続するためのプルリクエストがあります。

https://github.com/scikit-learn/scikit-learn/pull/1537

3- CountVectorizerを呼び出して2文字の単語を除外するにはどうすればよいですか?

トークン化に使用されるデフォルトの正規表現を変更できます。

>>> from sklearn.feature_extraction.text import CountVectorizer
>>> CountVectorizer().token_pattern
u'(?u)\\b\\w\\w+\\b'
>>> CountVectorizer(token_pattern=u'(?u)\\b\\w{3,}\\b').build_tokenizer()(
...    'a ab abc abcd abcde xxxxxxxxxxxxxxxxxxxxxx')
['abc', 'abcd', 'abcde', 'xxxxxxxxxxxxxxxxxxxxxx']
>>> CountVectorizer(token_pattern=u'(?u)\\b\\w{3,9}\\b').build_tokenizer()(
...     'a ab abc abcd abcde xxxxxxxxxxxxxxxxxxxxxx')
['abc', 'abcd', 'abcde']

しかし、あなたの場合、トークナイザー全体を置き換えたいと思うかもしれません。デフォルトの実装のソースを引き続き確認できます。

ただし、1つの注意点として、タグクラウドを構築するには、nltkを直接使用collections.Counterし、Python標準ライブラリのクラスを使用する方がはるかに簡単です。sklearnはこのタスクに多くを提供しません。

于 2013-02-07T14:58:41.653 に答える