Сравнение двух файлов .txt в Python и сохранение точных и похожих совпадений в файл .txt - PullRequest
1 голос
/ 07 июля 2011

Что мне нужно, это:

text_file_1.txt:
apple
orange
ice
icecream

text_file_2.txt:
apple
pear
ice

Когда я использую «set», вывод будет:

apple
ice

(«эквивалент re.match»)

но я хочу получить:

apple
ice
icecream

(«эквивалент re.search»)

Есть ли способ сделать это? Файлы большие, поэтому я не могу просто перебрать их и использовать регулярные выражения.

Ответы [ 2 ]

2 голосов
/ 07 июля 2011

Если все, что вам нужно, это извлечь из файлов слова, которые являются одной подстрокой другого (включая идентичные), вы можете сделать:

fone = set(['apple', 'orange', 'ice', 'icecream'])
ftwo = set(['apple' ,'pear' ,'ice'])
# transforming to sets saves to check twice for the same combination

result = []
for wone in fone:
    for wtwo in ftwo:
        if wone.find(wtwo) != -1 or wtwo.find(wone) != -1:
            result.append(wone)
            result.append(wtwo)
for w in set(result):
    print w

В качестве альтернативы, если вы хотите, чтобы на основе сходствао том, как строки похожи в порядке их букв, вы можете использовать, как предположил Пол в своем ответе, один из классов, представленных difflib:

import difflib as dl

fone = set(['apple', 'orange', 'ice', 'icecream'])
ftwo = set(['apple' ,'pear' ,'ice'])

result = []
for wone in fone:
    for wtwo in ftwo:
        s = dl.SequenceMatcher(None, wone, wtwo)
        if s.ratio() > 0.6:  #0.6 is the conventional threshold to define "close matches"
            result.append(wone)
            result.append(wtwo)
for w in set(result):
    print w

Я не рассчитал ни один из двух примеров, ноЯ предполагаю, что второй будет работать намного медленнее, так как для каждой пары вам придется создавать экземпляр объекта ...

2 голосов
/ 07 июля 2011

вы можете проверить difflib

...