我希望通过查找单词得到完整的句子和段落。 例如:如果我在文本中搜索“已发布”“数百名政治犯已被释放,审查规则已经放宽。欧盟和美国已取消对缅甸的大部分制裁。” 它应该回归“数百名政治犯已被释放,审查规则已经放宽。”和整段也是如此。
答案 0 :(得分:1)
您的数据结构如何?
您可以通过查找1-2个新行字符来获取段落。对于句子,您需要做一些text segmentation。例如,使用适用于Python的NLTK库,您可以使用预训练的Punkt sentence segment-er,该文档在大型语料库中进行训练,以便了解Mr.
和U.S.A.
之类的内容句子的结尾,即使它们包含句点(请参阅此问题:Python split text on sentences)。
一旦您可以将文本细分为段落和句子,您需要决定是否只想对语料库进行线性传递,或者更有可能使用information retrieval技术对数据进行索引,例如构建inverted index,或使用Apache Lunce等现有解决方案。
答案 1 :(得分: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);
}
答案 2 :(得分: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,其中句子是键,段落是值。