問題タブ [tf-idf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java API:特定のWebページのtf-idfをダウンロードして計算します
私はIR技術に不慣れです。
次のことを行うJavaベースのAPIまたはツールを探しています。
- 指定されたURLのセットをダウンロードします
- トークンを抽出します
- ストップワードを削除する
- ステミングを実行する
- 転置インデックスの作成
- TF-IDFを計算します
Luceneがどのように役立つかを教えてください。
よろしくYuvi
java - Lucene では、1 つのインデックスを検索して、別のインデックスから IDF を使用できますか?
過去数日間に索引付けされた結果のみを表示するシステムを構築しています。さらに、数日 (数千のドキュメント) からの結果のみを返したい場合は、100 万のドキュメントを含む巨大なインデックスを維持したくありません。
一方、私のシステムは、インデックスに保存されているドキュメント内の用語の出現が現実的な分布 (結果: 現実的な IDF) を持っていることに大きく依存しています。
とはいえ、小さなインデックスを使用して結果を返したいのですが、はるかに大きなインデックス (または外部ソース) からの IDF を使用してドキュメント スコアを計算したいと考えています。
Similarity API では、これを行うことができないようです。idfメソッドは、使用されている用語をパラメーターとして受け取りません。
もう 1 つの可能性は、TrieRangeQuery を使用して、表示されるドキュメントが過去数日以内のものであることを確認することです。繰り返しますが、私はむしろ大きなインデックスを維持していません。また、この種のクエリは安価ではありません。
search - Lucene を転置インデックスとして使用する
Lucene には、インクリメンタル インデックス作成の優れた機能があります。これは通常、IR システムをゼロから開発する際の苦痛です。低レベルの Lucene API を使用して、逆インデックス、つまり、逆リスト、位置情報、単語の頻度、idfs、フィールド ストレージなどのストレージとしてのみ使用できるかどうかを知りたいです...
要点は、ドキュメントの独自の重み付けとスコアリングを実装したいということです。私はSimilarity
クラスを認識していますが、それは私が望む柔軟性を与えません。
java - TF-IDFの結果が1つしか得られないのはなぜですか?
こんにちは、これは用語頻度とTF-IDFを計算するための私のコードです。最初のコードは、特定の文字列の各ファイルの用語頻度を計算します。2番目のコードは、上記の値を使用して各ファイルのTF-IDFを計算することになっています。しかし、私は1つの値しか受け取りませんでした。各ドキュメントにTF-IDF値を提供することになっています。
用語頻度の出力例:
入力された単語は「is」です
| ファイル=abc0.txt|
は--->単語数=|2 | 総数=|150 | 期間頻度=| 0.0133 |
入力された単語は「is」です
| ファイル=abc1.txt|
は--->単語数=|0 | 総数=|9 | 期間頻度=| 0.0000 |
TF-IDF
is->用語7を含むこのファイル数
は->IDF0.1962946357308887
is-> TFIDF 0.0028607962606519654 <<<ファイルごとに1つの値を取得すると想定します。つまり、10個のファイルがあり、異なるファイルごとに10個の異なる値を取得すると想定します。ただし、出力されるのは1つの結果のみです。誰かが私の間違いを指摘できますか?
javascript - TF-IDF Corpus 分散を使用することは可能ですか
TF-IDF(一般的な英語コーパスと比較して一般的な単語を削除する)を実行することにより、Webページを一意に識別することを目的としたソフトウェアを開発しています。良い無料のコーパス (http://www.wordfrequency.info/top5000.asp) を見つけるのに時間がかかりましたが、このコーパスは頻度と分散しか提供していません。コーパスに含まれるドキュメントの数が表示されないため、IDF テーブルを計算できません。これには、0 ~ 1 の範囲の分散値が含まれます。1 は、単語がすべてのドキュメントに出現することを示します。このデータを使用して同様の IDF テーブルを実現する方法を知っている (または理解できる) 人はいますか? また、私が必要とする情報を含む無料のコーパスを誰かが知っていれば、それも同様にありがたいです。ありがとう
java - Javaプログラムを使用してコサイン類似度を計算する
最終プロジェクトの検索エンジンを開発するために、類似度の測定値を計算するのに問題があります。
Javaでtfidf+コサイン類似度を使用する必要があり、それを計算する方法がわかりません。
参考までに、私は811のドキュメントを持っている私自身のデータベースを持っています
java - 行列TFIDFの次元削減
TFIdf(項頻度、逆ドキュメント頻度)を計算し、このステップの後、LSI、カイ2乗検定などの方法を使用して、MyMatrixの次元を減らす必要があることを確認しました。
行列TFIDFの次元削減のためにJavaでカイ二乗検定を実装する方法がわかりません。これを行うためのライブラリまたはこれを行う方法を説明するチュートリアルがある場合は、教えてください
lucene - ドキュメントフィールドの特別な用語の頻度を計算するにはどうすればよいですか?
Luceneがどのようにそれを作成できるのか疑問に思います。ソースコードから、IndexReaderを使用してサーチャーを初期化するときにセグメントファイルを開いてロードすることがわかりますが、Luceneがドキュメント内の用語の頻度を計算する方法を教えてくれる人はいますか?特別なフィールド。特別なアルゴリズムはありますか?次のように、tfの説明コードを読んでいるときにそれを理解することはできません:
Idf> 0ですが、コードのphraseFreqが0.0である理由は、(d == doc)がfalseであるためです。これは、d = Integer.MAX_VALUEであるため、問題の理由と原因がわかりません。
インデックスが付けられて保存される1つのフィールドを持つドキュメントが1つだけあり、デバッグコードで使用されるドキュメントはsearcher.explan(booleanQuery、1);のように1です。
lucene - 数値フィールドのLuceneカスタムスコアリング
テキストコンテンツフィールドに対するtf-idfの類似性を使用した標準的な用語検索に加えて、数値フィールドの「類似性」に基づいてスコアを付けたいと思います。この類似性は、クエリとドキュメントの値の間の距離に依存します(たとえば、m = [ユーザー入力]、s = 0.5のガウス分布)
つまり、ドキュメントが人を表し、人のドキュメントには2つのフィールドがあるとします。
- 説明(全文)
- 年齢(数値)。
次のようなドキュメントを見つけたい
説明:(xyz)年齢:30
ただし、年齢はフィルターではなく、スコアの一部になります(30歳の人の乗数は1.0、25歳の人の場合は0.8など)
これは賢明な方法で達成できますか?
編集:最後に、ValueSourceQueryとTermQueryをCustomScoreQueryでラップすることでこれを実行できることがわかりました。以下の私の解決策を参照してください。
編集2: Luceneのバージョンが急速に変化しているので、Lucene 3.0(Java)でテストされたことを追加したいと思います。
lucene - テキストコーパスから意味的関連性を抽出する方法
目標は、大きなテキストコーパス内の用語間の意味的関連性を評価することです。たとえば、「警察」と「犯罪」は、同じコンテキストで同時に発生する傾向があるため、「警察」と「山」よりも強い意味的関連性を持つ必要があります。
私が読んだ最も簡単なアプローチは、コーパスからIF-IDF情報を抽出することです。
多くの人が潜在意味解析を使用して意味相関を見つけます。
Lucene検索エンジンに出くわしました:http://lucene.apache.org/
IF-IDFを抽出するのが適切だと思いますか?
テクニックとソフトウェアツール(Javaを優先)の両方の観点から、私がやろうとしていることを何をすることをお勧めしますか?
前もって感謝します!
ムローン