単語を検索して文と段落全体を取得したい。例: 「何百人もの政治犯が釈放され、検閲規則が緩和されました。その結果、EU と米国はビルマに対する制裁の大部分を解除しました。」というテキストで「釈放済み」を検索すると、「数百人」が返されます。の政治犯が釈放され、検閲規則が緩和されました。」段落全体も同様です。
1385 次
3 に答える
1
を使用indexOf
して、段落の区切りを前後に検索します。<p>
またはかもしれません\n
。
public static String findParagraph(String source, String searchText, String paragraphSeparator)
{
final int locationOfSearchTerm = source.indexOf(searchText);
if (locationOfSearchTerm == -1) return null;
int paragraphEnd = source.indexOf(paragraphSeparator, locationOfSearchTerm + searchText.length);
//if we didn't find an end of a paragraph, we want to go the end
if (paragraphEnd == -1) paragraphEnd = searchText.length;
int paragraphStart = source.lastIndexOf(paragraphSeparator, locationOfSearchTerm);
//if we didn't find a start of a paragraph, we want to go the beginning
if (paragraphStart == -1) paragraphStart = 0;
return searchText.subString(paragraphStart, paragraphEnd - 1);
}
于 2013-05-24T12:29:49.577 に答える
1
データはどのように構造化されていますか?
おそらく、1 ~ 2 個以上の改行文字を探すことで段落を取得できます。文については、テキストのセグメンテーションを行う必要があります。たとえば、Python の NLTK ライブラリを使用すると、事前にトレーニングされたPunkt 文の segment-erMr.
を使用できます。これは、ピリオドが含まれていても、文の終わりをマークしたりマークしたりしU.S.A.
ないことを学習するために、大規模なコーパスでトレーニングされます。 (この質問を参照してください:文の Python 分割テキスト)。
テキストを段落と文に分割できたら、コーパスを線形パスで処理するだけにするか、逆索引を作成するなどの情報検索手法を使用してデータに索引を付けるかを決定する必要があります。 Apache Lunceのような既存のソリューション。
于 2013-05-24T11:42:05.847 に答える
0
これを行う方法はたくさんあります。これが1つです:
文と段落を関連付けるマップを作成します。
Map<String, String> map = new HashMap<String, String>();
map.put("Hundreds of political prisoners have been released, and censorship rules have been relaxed.", The EU and US have lifted the majority of sanctions against Burma as a result.);
...
すべてのテキストでマップを作成したら、次の方法で検索できます。
public Map<String, String> searchInSentence(String toFind, Map<String, String> texts){
Map<String, String> result = new HashMap<String, String>();
for(Entry<String, String> entry : texts.entrySet(){
if(entry.getKey().contains(toFind){
result.put(e.getKey(), e.getValue();
}
}
return result;
}
文がキーで段落が値である Map を返します。
于 2013-05-24T11:48:12.723 に答える