我正在努力完成的是一个程序,该程序读入一个文件,并根据原来的句子来比较每个句子。 与原文完美匹配的句子将得到1分,相反的句子将得到0分。所有其他的模糊语句将在1到0之间得到一个分数。 我不确定要使用哪种操作来允许我在Python 3中完成此操作。 我已经包含了示例文本,其中文本1是原始文本,其他前面的string是比较。 文本:示例 文本1:这是一个黑暗和暴风雨的夜晚。 我独自坐在一把红色的椅子上。 我并不完全孤单,因为我有三只猫。 案文20:这是一个阴暗暴风雨的夜晚。 我独自一人坐在深红色的椅子上。 我并不完全孤单,因为我有三只猫,//得分高,但不是1 文本21:这是一个阴暗暴躁的夜晚。 我独自一人坐在深红的教堂里。 我没有完全孤单,因为我有三只猫科动物//比分数低20 文字22:我独自一人坐在深红色的教堂里。 我并不完全孤单,因为我有三只猫。 这是一个阴暗暴风雨的夜晚。 //得分低于文本21但不是0 文字24:这是一个黑暗和暴风雨的夜晚。 我并不孤单。 我没有坐在红色的椅子上。 我有三只猫。 / /应该得分0!
我试图清理一个数据库,多年来,已经获得了许多重复logging,名称略有不同。 例如,在公司表中,有“Some Company Limited”和“Some Company LTD!”这样的名称。 我的计划是将违规表导出为R,将名称转换为小写,replace常见的同义词(如“limited” – >“ltd”), agrep非字母字符,然后使用agrep来查看相似的内容。 我的第一个问题是, agrep只接受一个匹配的模式,并且循环每个公司名称以匹配其他公司是慢的。 (有些表格需要清理,有几十个,可能有几十万个名字需要检查。) 我非常简单地看了一下tm包( JSS文章 ),它看起来非常强大,但是适用于分析大块文本,而不仅仅是名称。 我有几个相关的问题: tm包是否适合这类任务? 有更快的selectagrep ? (所述函数使用Levenshtein编辑距离,这是非常慢的)。 除了agrep和tm之外,R中还有其他合适的工具吗? 我甚至应该在R中这样做,还是应该直接在数据库中完成这种事情呢? (这是一个Access数据库,所以如果可能的话,我宁愿避免碰它。)
在我的工作中,我使用了近似的string匹配algorithm,如Damerau-Levenshtein距离,使我的代码更容易受到拼写错误的影响。 现在我需要匹配string对简单的正则expression式,例如TV Schedule for \d\d (Jan|Feb|Mar|…) 。 这意味着TV Schedule for 10 Jan的stringTV Schedule for 10 Jan应该返回0,而TV Schedule for 10 Jan T Schedule for 10. Jan应该返回2。 这可以通过生成正则expression式中的所有string(在本例中为100×12)并find最佳匹配来完成,但是这并不实际。 你有什么想法如何有效地做到这一点?