在两个文档之间找到类似的句子,并计算整个文档中每个部分的相似性得分

时间:2016-10-25 18:44:33

标签: python machine-learning nltk

我从网上拿了这个例子。我的文件包含:

文件1:

访问目的:进行身体检查。

患者病史:这是这位56岁女性的首次入院, 在入院前一周,她表示自己处于健康状态。那时她注意到胸痛的突然发作(几秒到一分钟),她描述为性格暗沉和疼痛。疼痛始于左侧胸骨区,并向颈部辐射。

药物:1。批评。 2. p.n.b.s

系统评论:

HEENT:

每个周末有1或2瓶啤酒;每周一次,晚餐一杯葡萄酒。

Cadiovascular:

参见HPI

文件2包含:

访问目的:进行身体检查。

患者病史:这是这位56岁女性的首次入院, 在入院前一周,她表示自己处于健康状态。那时她注意到胸痛的突然发作(几秒到一分钟),她描述为性格暗沉和疼痛。疼痛始于左侧胸骨区,并向颈部辐射。她不吸烟也不吸烟。 她3年前被诊断出患有高血压,6年前曾患过BSO。她不接受激素替代治疗。有早产CAD的家族史。她不知道她的胆固醇水平。

药物:1。批评。 2. Flexon

系统评论:

HEENT:

每个周末有1或2瓶啤酒;每周一次,晚餐一杯葡萄酒。

Cadiovascular: 见HPI

生殖泌尿: 没有关于排尿困难,夜尿,多尿,血尿或阴道出血的抱怨。

我正在考虑在(。)的基础上拆分文件中的每一行,并在(:)的基础上拆分。但有时在文件中我也有3.5或在医学部分所有药物被分开(。)像药1你好。 2嗨。

如何计算两个文件的这些部分之间的相似性得分。

1 个答案:

答案 0 :(得分:1)

您可以使用difflib模块。

  

该模块提供用于比较序列的类和函数。它可以用于例如比较文件,并且可以以各种格式产生差异信息,包括HTML和上下文以及统一差异。有关目录和文件的比较,另请参阅filecmp模块。

在您的情况下,您需要difflib.SequenceMatcher类来比较任何类型的序列对,只要序列元素是可清除的。

示例示例:

from difflib import SequenceMatcher
text_1 = "private Thread currentThread;"
text_2 = "private volatile Thread currentThread;"
s = SequenceMatcher(lambda x: x == " ",
                    text_1,
                    text_2)

现在,要测量序列的相似性,请使用ratio(),在float中返回[0, 1]。根据经验, ratio()值超过0.6意味着序列是紧密匹配。

>>> s.ratio()
0.8656716417910447