自动文本摘要
听起来您对automatic text summarization 感兴趣。要对问题、涉及的问题和可用算法有一个很好的概述,请查看 Das 和 Martin 的论文 A Survey on Automatic Text Summarization (2007)。
简单算法
一个简单但相当有效的摘要算法是从原始文本中选择有限数量的句子,其中包含最频繁的内容词(即最频繁的句子不包括stop list 词)。
Summarizer(originalText, maxSummarySize):
// start with the raw freqs, e.g. [(10,'the'), (3,'language'), (8,'code')...]
wordFrequences = getWordCounts(originalText)
// filter, e.g. [(3, 'language'), (8, 'code')...]
contentWordFrequences = filtStopWords(wordFrequences)
// sort by freq & drop counts, e.g. ['code', 'language'...]
contentWordsSortbyFreq = sortByFreqThenDropFreq(contentWordFrequences)
// Split Sentences
sentences = getSentences(originalText)
// Select up to maxSummarySize sentences
setSummarySentences = {}
foreach word in contentWordsSortbyFreq:
firstMatchingSentence = search(sentences, word)
setSummarySentences.add(firstMatchingSentence)
if setSummarySentences.size() = maxSummarySize:
break
// construct summary out of select sentences, preserving original ordering
summary = ""
foreach sentence in sentences:
if sentence in setSummarySentences:
summary = summary + " " + sentence
return summary
一些使用该算法进行汇总的开源包是:
Classifier4J (Java)
如果您使用的是 Java,则可以使用 Classifier4J 的模块 SimpleSummarizer。
使用here的例子,假设原文是:
Classifier4J 是一个用于处理文本的 java 包。 Classifier4J 包括一个摘要器。 Summariser 允许对文本进行摘要。 Summariser 真的很酷。我不认为有任何其他的 java 总结。
如下面的sn-p所示,你可以轻松创建一个简单的一句话总结:
// Request a 1 sentence summary
String summary = summariser.summarise(longOriginalText, 1);
使用上面的算法,这将产生Classifier4J includes a summariser.。
NClassifier (C#)
如果您使用 C#,则有一个 Classifier4J 到 C# 的端口,称为 NClassifier
Tristan Havelick 的 NLTK 总结器(Python)
Classifier4J 的摘要器的 Python 端口正在开发中,该端口使用 Python 的 Natural Language Toolkit (NLTK) 可用 here 构建。