バックグラウンド
データベースの列名を対応する英語のテキストに分割して、データ ディクショナリをシードします。英語辞書は、企業文書、wiki、および電子メールのコーパスから作成されます。辞書 ( lexicon.csv
) は単語と確率を含む CSV ファイルです。したがって、誰かが「セラピスト」という単語を(電子メールまたはウィキページで)書く頻度が高いほど、「セラピスト名」が他の何かではなく「セラピスト名」に分割される可能性が高くなります. (レキシコンには、おそらくレイピストという単語さえ含まれないでしょう。)
ソースコード
- TextSegmenter.java @ http://pastebin.com/taXyE03L
- SortableValueMap.java @ http://pastebin.com/v3hRXYan
データファイル
- lexicon.csv - http://pastebin.com/0crECtXY
- columns.txt - http://pastebin.com/EtN9Qesr
問題 (2011 年 1 月 3 日更新)
次の問題が発生した場合:
dependentrelationship::end depend ent dependent relationship
end=0.86
ent=0.001
dependent=0.8
relationship=0.9
次の解決策が考えられます。
dependentrelationship::dependent relationship
dependentrelationship::dep end ent relationship
dependentrelationship::depend ent relationship
レキシコンには、相対的な確率 (単語の頻度に基づく) を持つ単語が含まれています: dependent 0.8
、end 0.86
、relationship 0.9
、depend 0.3
、およびent 0.001
。
dep end ent relationship
なぜなら、辞書にないためdep
(つまり、75% の単語使用)のソリューションを削除し、他の 2 つのソリューションは辞書内の単語の 100% をカバーします。残りの解のうち、 の確率dependent relationship
は0.72ですが、 0.00027depend ent relationship
です。したがって、正解として選択できます。dependent relationship
関連している
- 「文」内の単語をスペースで区切る方法は?
- トップ コーダー - テキスト セグメンテーション プレゼンテーション 1/2
- トップ コーダー - テキスト セグメンテーション プレゼンテーション 2/2
- 動的計画法アルゴリズムを使用した線形テキスト セグメンテーション
- 動的計画法: セグメンテーション
- 動的計画法: 計算ツール
質問
与えられた:
// The concatenated phrase or database column (e.g., dependentrelationship).
String concat;
// All words (String) in the lexicon within concat, in left-to-right order; and
// the ranked probability of those words (Double). (E.g., {end, 0.97}
// {dependent, 0.86}, {relationship, 0.95}.)
Map.Entry<String, Double> word;
レキシコンの範囲と確率に基づいて最も可能性の高いソリューションを生成するルーチンをどのように実装しますか? 例えば:
for( Map.Entry<String, Double> word : words ) {
result.append( word.getKey() ).append( ' ' );
// What goes here?
System.out.printf( "%s=%f\n", word.getKey(), word.getValue() );
}
ありがとうございました!