自动文本摘要
听起来你对自动文本摘要很感兴趣。如果想了解该问题的概述、相关问题以及可用算法,请查看Das和Martin的论文《自动文本摘要综述》(2007年)。
简单算法
一个简单但相当有效的摘要算法是从原始文本中选择包含最常见内容词(即不包括停用词的最常见词)的有限数量的句子。
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包括一个摘要生成器。 摘要生成器允许对文本进行摘要。 摘要生成器非常酷。 我想没有其他Java摘要生成器了。
如下代码片段所示,您可以轻松创建一个简单的一句话摘要:
// Request a 1 sentence summary
String summary = summariser.summarise(longOriginalText, 1);
使用上述算法,这将产生
Classifier4J 包括一个摘要器。
。
NClassifier(C#)
如果您使用的是 C#,那么有一个名为
NClassifier的 Classifier4J 的 C# 移植版可用。
Tristan Havelick's Summarizer for NLTK(Python)
有一个正在进行中的 Python 移植版本 Classifier4J 的摘要器,使用了 Python 的
自然语言工具包(NLTK),可在此处
here 获取。