Найти совпадения для записей в одном файле в другом файле - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть файл, содержащий слова, и другой файл «словаря», содержащий определения.Я хочу найти определение для каждого слова в словаре и записать его в файл.

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

with open('D:/words_and_definitions.txt', 'w') as fo:
    dict_file = open('D:/Oxford_English_Dictionary-orig.txt','r')
    word_file = open('D:/Words.txt','r')
    definitions = dict_file.readlines()
    words = word_file.readlines()
    count = 1;
    for word in words:
        findStatus='not_found'
        word = word.strip() + ' '
        for definition in definitions:
            if re.match(r''+word, definition) is None:
                count += 1
            else:
                fo.write(definition)
                findStatus='found'
                break
        if findStatus == 'not_found':
            fo.write(word+' ****************no definition' + '\n')
print("all done")

word_file не отсортирован по алфавиту, dict_file равен.

Пример из word_file

Inane
Relevant
Impetuous
Ambivalent
Dejected
Postmortem
Incriminate

Образец из файла dict_file

Ambiguity -n. the condition of admitting of two or more meanings, of being understood in more than one way, or of referring to two or more things at the same time 
Ambiguous  adj. 1 having an obscure or double meaning. 2 difficult to classify.  ambiguity n. (pl. -ies). [latin ambi- both ways, ago drive]
Ambit  n. Scope, extent, or bounds. [latin: related to *ambience]
Ambition  n. 1 determination to succeed. 2 object of this. [latin, = canvassing: related to *ambience]
Ambitious  adj. 1 full of ambition or high aims. 2 (foll. By of, or to + infin.) Strongly determined.
Ambivalence  n. Coexistence of opposing feelings.  ambivalent adj. [latin ambo both, *equivalent]
Ambivalent adj. having opposing feelings, undecided
Amble  —v. (-ling) move at an easy pace. —n. Such a pace. [latin ambulo walk]

1 Ответ

0 голосов
/ 30 декабря 2018

Вы пытались использовать словари, чтобы найти определение?Конечно, у вас могут быть проблемы с памятью, если ваш файл определения слишком велик, но в вашем случае этого может быть достаточно.Это может дать простое решение:

import re

definition_finder = re.compile(r'^(\w+)\s+(.*)$')

with open('Oxford_English_Dictionary-orig.txt') as dict_file:
    definitions = {}
    for line in dict_file:
        definition_found = definition_finder.match(line)
        if definition_found:
            definitions[definition_found.group(1)] = definition_found.group(2)

with open('Words.txt') as word_file:
    with open('words_and_definitions.txt', 'w') as fo:
        input_lines = (line.strip("\n") for line in word_file)
        for line in input_lines:
            fo.write(f"{line} {definitions.get(line, '****************no definition')}\n")

У вас может быть более компактный способ определения ваших определений.Это даст:

import re

definition_finder = re.compile(r'^(\w+)\s+(.*)$')

with open('Oxford_English_Dictionary-orig.txt') as dict_file:
    definitions_found = (definition_finder.match(line) for line in dict_file) 
    definitions = dict(definition_found.groups() for definition_found
                       in definitions_found if definition_found)

with open('Words.txt') as word_file:
    with open('words_and_definitions.txt', 'w') as fo:
        input_lines = (line.strip("\n") for line in word_file)
        for line in input_lines:
            fo.write(f"{line} {definitions.get(line, '****************no definition')}\n")

Если ваш файл определения действительно слишком большой, вы можете рассмотреть, например, использование базы данных, такой как модуль sqlite3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...