c# - 在不同文档中查找相似段落

标签 c# nlp

<分区>

我试图弄清楚那里有什么类型的分析和当前可用的库,当输入两个文本段落时,确定两者之间是否存在某种程度的相似性(无论是关于主语和动词,或上下文)。我想可能会有一些 NLP 类型的分析可以完成,但要看看人们在这些解决方案中有什么经验。

例如,考虑以下两段:

  1. 适用法律。本协议(protocol)受密苏里州法律管辖,不考虑其法律冲突原则。

  2. 适用法律。密苏里州法律适用于本协议(protocol)。

从根本上说,我希望将这两个子句选为相同的。

我正在寻找 .Net 下可用的库。

最佳答案

嗯,这是一个有趣的问题。您可以使用 NLTK 提取核心概念(名词组)并直接比较它们。在这种情况下,你会得到:

  1. 适用法律、协议(protocol)、法律、州、密苏里州、冲突、法律原则
  2. 法律、法律、州、密苏里州、协议(protocol)

现在,相似性不是双向的。第 2 组在第 1 组中得到充分体现,但反之则不然。您可以应用调和平均值,计算一个组在另一个组中的百分比,因此 G21 为 1.0,G12 为 0.57。因此调和平均值为 H = 2AB/(A+B) == 2(1.0)*(0.57)/(1.0 + 0.57) = 0.72。

现在,这并不相同,但在您的示例中,您希望两个段落之间存在匹配项。在这种情况下,它们的调和平均值 H 为 0.72。数字越大,越难达到。 H>0.8被认为是好的。大多数系统的 H>0.9 是异常(exception)。所以你必须决定的是你想在沙子中的什么地方画出你的任意线?它必须是任意的,因为您没有给出相似度的定义。那你设置成0.6,0.7? 0.12948737 怎么样?发现此阈值的一个好方法是采用测试示例,无需进行数学运算,只需自行判断它们的相似性,然后运行数字并查看您得出的结果。

关于c# - 在不同文档中查找相似段落,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7730934/

相关文章:

java - 限制 Java 方法调用的 CPU/堆栈?

c# - 创建新线程,传递参数

c# - 正则表达式从字符串末尾删除数字和连字符(-)

C# 将 List<ObjBase> 转换为 List<Obj>

python - 如何在bertopic建模中获得主题概率矩阵

python-3.x - 我的作业文档中的 NLP 示例崩溃了

python-3.x - 非英语语料的词云

python - MultiheadAttention 中的 attn_output_weights

python - C# 相当于 Python 的 ThreadPool

c# - 迁移中未应用的最大长度