我想通过查找单词来获得整个句子和段落。例如:如果我在文本“数百名政治犯已被释放,审查规则已放松。欧盟和美国因此取消了对缅甸的大部分制裁”中搜索“释放”,它应该返回“数百名”政治犯已被释放,审查规则已放宽。” 以及整个段落。
问问题
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-er,它在大型语料库上进行训练,以便学习类似句子的结尾Mr.
并且U.S.A.
不标记句子结尾,即使它们包含句点(见这个问题:Python split text on sentences)。
一旦您可以将文本分割成段落和句子,您需要决定是否只想对语料库进行线性传递,或者更可能使用信息检索技术(例如通过构建倒排索引)或使用像Apache Lunce这样的现有解决方案。
于 2013-05-24T11:42:05.847 回答
0
有很多方法可以做到这一点。这是一个:
创建一个关联句子和段落的地图:
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 回答