-1

我想通过查找单词来获得整个句子和段落。例如:如果我在文本“数百名政治犯已被释放,审查规则已放松。欧盟和美国因此取消了对缅甸的大部分制裁”中搜索“释放”,它应该返回“数百名”政治犯已被释放,审查规则已放宽。” 以及整个段落。

4

3 回答 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 回答