text - 如何使用 NLP 将非结构化文本内容分成不同的段落?

标签 text nlp classification cluster-analysis text-segmentation

以下非结构化文本具有三个不同的主题:史泰龙、费城和美国革命。但是您会使用哪种算法或技术将此内容分成不同的段落?

分类器在这种情况下不起作用。我还尝试使用 Jaccard 相似度分析器来查找连续句子之间的距离,并尝试在连续句子之间的距离小于给定值时将它们分组为一个段落。有更好的方法吗?

这是我的文本示例:

Sylvester Gardenzio Stallone , nicknamed Sly Stallone, is an American actor, filmmaker and screenwriter. Stallone is known for his machismo and Hollywood action roles. Stallone's film Rocky was inducted into the National Film Registry as well as having its film props placed in the Smithsonian Museum. Stallone's use of the front entrance to the Philadelphia Museum of Art in the Rocky series led the area to be nicknamed the Rocky Steps.A commercial, educational, and cultural center, Philadelphia was once the second-largest city in the British Empire (after London), and the social and geographical center of the original 13 American colonies. It was a centerpiece of early American history, host to many of the ideas and actions that gave birth to the American Revolution and independence.The American Revolution was the political upheaval during the last half of the 18th century in which thirteen colonies in North America joined together to break free from the British Empire, combining to become the United States of America. They first rejected the authority of the Parliament of Great Britain to govern them from overseas without representation, and then expelled all royal officials. By 1774 each colony had established a Provincial Congress, or an equivalent governmental institution, to form individual self-governing states.

最佳答案

所以我在 NLP 领域工作了很长时间,这是一个你想要解决的非常棘手的问题。您永远无法实现 100% 准确度的解决方案,因此您应该预先决定是做出假阴性决策(未能找到段落分割点)还是假阳性决策(插入虚假分段)更好点)。完成此操作后,收集文档语料库并注释您期望找到的真实分割点。

完成此操作后,您将需要一种查找 EOS(句尾)点的机制。然后,在每对句子之间,您需要做出二元决定:是否应该在此处插入段落边界?

您可以根据不同的分割点来衡量每个段落中概念的凝聚力。例如,在一个有五个句子的文档(ABCDE)中,有十六种不同的分段方法:

ABCDE   ABCD|E   ABC|DE   ABC|D|E   AB|CDE   AB|CD|E   AB|C|DE   AB|C|D|E
A|BCDE  A|BCD|E  A|BC|DE  A|BC|D|E  A|B|CDE  A|B|CD|E  A|B|C|DE  A|B|C|D|E

为了衡量衔接性,您可以使用句子之间的相似性度量(基于为每个句子提取的一些特征集合)。为简单起见,如果两个相邻句子的相似度度量为 0.95,则将它们组合到同一段落中的“成本”为 0.05。文档分割计划的总成本是所有句子连接成本的总和。为了达到最终的分割,您选择总成本最低的计划。

当然,对于包含多个句子的文档,有太多不同的可能的分段排列,无法强力评估其所有成本。因此,您需要一些启发式方法来指导该过程。动态编程在这里可能会有所帮助。

至于实际的句子特征提取......嗯,这就是它变得非常复杂的地方。

您可能想忽略高度句法的单词(介词、连词、助动词和从句标记等连接词),并将相似性建立在语义更相关的单词(名词和动词,以及较小程度上的形容词和副词)上.

简单的实现可能只是计算每个单词的实例数量,并将一个句子中的单词计数与相邻句子中的单词计数进行比较。如果一个重要的单词(例如“Philadelphia”)出现在两个相邻的句子中,那么它们可能会获得很高的相似度得分。

但问题在于,两个相邻的句子可能具有非常相似的主题,即使这些句子具有完全不重叠的单词集。

因此,您需要评估每个单词的“含义”(在给定周围上下文的情况下,其特定含义)并将该含义概括为涵盖更广泛的领域。

例如,想象一个含有“greenish”一词的句子。在我的特征提取过程中,我当然会包含确切的词汇值(“绿色”),但我还会应用形态变换,将单词标准化为其根形式(“绿色”)。然后我会在分类中查找该单词,发现它是一种颜色,可以进一步概括为视觉描述符。因此,基于这个词,我可能会在我的句子特征集合中添加四种不同的特征(“绿色”、“绿色”、“[颜色]”、“[视觉]”)。如果文档中的下一个句子再次提到颜色“绿色”,那么这两个句子将非常相似。如果下一句话使用“红色”这个词,那么它们仍然有一定程度的相似性,但程度较小。

所以,有一些基本的想法。您可以无限地详细说明这些并调整算法以在您的特定数据集上表现良好。有一百万种不同的方法可以解决这个问题,但我希望其中一些建议对您入门有所帮助。

关于text - 如何使用 NLP 将非结构化文本内容分成不同的段落?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3237624/

相关文章:

python - 如何向矢量化数据集添加特征?

text - 在 clojure 中读取文件并忽略第一行?

python - 从 pandas 数据框中的句子列表中删除标点符号

r - 定义单词的类别

text - 围绕主题聚集短语

machine-learning - 是否认为对具有完美属性的决策树过度拟合?

machine-learning - 用于数值转换的机器学习

java - 将 #text 从 getNodeName 转换为字符串

c++ - Qt - 滚动浏览大文本缓冲区

ios - 以单词而不是字符获取字符串的长度? ( swift )