我从网上拿了这个例子。我的文件包含:
文件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嗨。
如何计算两个文件的这些部分之间的相似性得分。
答案 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