2016-07-22 6 views
0

私はNLTKプロジェクトに取り組んでいます。原則的に標準シソーラスのようなものですが、(準)連続です。一つの例を挙げると、宗教的な古典と元帳の両方を含む数十の記入項目が本と結びついています。NLTKに、同義語を島ではなく近くの用語に関連付けるように求めるにはどうすればよいですか?

私はいくつかの言葉でひっくり返ってみましたが、私はそれを行うことによってパイの小さなスライスを得るように見えました。 (「帳簿」の結果には「日刊帳」が含まれていたが、その物質は本を読んだときよりもはるかに小さな集まりだった)。文書中の「synset」の議論は、既存のものに近い用語を見つけることができるしかし、synsetsは島に似ている、または私にそれを参照してください。

「もし一致すると、高い一致スコアを持つすべての単語をXYZしきい値より上にしたい」または「最も近いn個の関連用語に一致させたい」という意味があります。このような文書は、2つの単語の間の近接度スコアを計算する本当に素晴らしい方法では可能ですが、閾値を調整する方法やn個の最も近い一致を要求する方法は分かりません。

私の最高の賭けは何ですか?

+0

私は本当にあなたのプロジェクトに従っていません。あなたは正確に何を達成しようとしていますか?あなたは(近)同義語を探していますか? – patrick

+0

私は[Visual Thesaurus](https://www.visualthesaurus.com/)のようなことをしようとしています。言い換えれば、1つの用語で始まり、ますます異なる意味で他の用語にナビゲートすることができます。道路や地形に相当するのは、舗装された道路を走行してワシントン州からフロリダ州、またはカリフォルニア州からニューヨーク州に移動し、舗装された道路のみを通過できることです(ジープ4x4は不要)。イリノイの道路があなたを連れ出すことのできない道路の非常に疎なグラフを想像してください。実際には2つまたは3つの接続されたコンポーネントしかありません。 (なぜ、私はもっと緻密なグラフを望んでいるのでしょうか?) – JonathanHayward

答えて

2

単語の任意のペア間の距離を計算できるようにしたい場合、WordNetは仕事の間違ったツールです。特定の用語のネットワークなので、2つのノード間にパスが存在するか、存在しません。代わりにコーパスベースの対策を見てください。

急いでgoogleはthis thread(SO上ではありません)を開始点とすることができました。

nltkでは、nltk.text.ContextIndexを見ることから始めます。これはnltkデモ機能nltk.Text.similar()の後ろにあるようです。単語のペア間の距離は計算されませんが、少なくとも、あなたが始めることができる豊富なコンテキストのネットワークがあります。

>>> contexts = nltk.text.ContextIndex(nltk.corpus.brown.words()[:100000]) 
>>> contexts.similar_words("fact") 
['jury', 'announcement', 'Washington', 'addition', '1961', 'impression', 
'news', 'belief', 'commissioners', 'Laos', 'return', '1959', '1960', '1956', 
'result', 'University', 'opinion', 'work', 'course', 'hope'] 

私は、この背後にあるアルゴリズムを見ていないが、これはのために仕事をしていない場合は、常に自分自身の好みのアルゴリズムを実装することができストップワードなど、句読点を削除するためにあなたにそれを残しておきます君は。

+0

うーん、私の心配の一部が確認されています。ドキュメント[example](http://www.nltk.org/howto/wordnet.html)には、これに対処する複数の類似オプションが用意されているようです。プロジェクトにお勧めする他のツールはありますか? – JonathanHayward

+0

私はこれを経験していません。 – alexis