Как сравнить содержимое двух больших текстовых файлов в Python? - PullRequest
0 голосов
/ 02 октября 2019

Наборы данных: два больших текстовых файла для обучения и проверки того, что все их слова размечены. часть данных похожа на следующее: «В пятницу большое жюри округа Фултон объявило, что расследование недавних первичных выборов в Атланте не дало« никаких доказательств »того, что какие-либо нарушения имели место».

Вопрос: Как я могу заменитькаждое слово в тестовых данных, не встречаемое при обучении со словом «unk» в Python?

До сих пор я составлял словарь по следующим кодам для подсчета частоты каждого слова в файле:

#open text file and assign it to varible with the name "readfile"
readfile= open('C:/Users/amtol/Desktop/NLP/Homework_1/brown-train.txt','r')

writefile=open('C:/Users/amtol/Desktop/NLP/Homework_1/brown-trainReplaced.txt','w')

# Create an empty dictionary 
d = dict()

# Loop through each line of the file
for line in readfile:

    # Split the line into words 
    words = line.split(" ") 

    # Iterate over each word in line 
    for word in words: 
        # Check if the word is already in dictionary 
        if word in d:

        # Increment count of word by 1 
            d[word] = d[word] + 1
        else: 
            # Add the word to dictionary with count 1 
            d[word] = 1

#replace all words occurring in the training data once with the token<unk>.

for key in list(d.keys()): 
    line= d[key] 
    if (line==1):
        line="<unk>"
        writefile.write(str(d))
    else:
        writefile.write(str(d))

#close the file that we have created and we wrote the new data in that
writefile.close()

Честно говоря, приведенный выше код не работает с writefile.write (str (d)), который я хочу записать в новый текстовый файл, но с помощью print (key, ":", line) он работаети показывает частоту каждого слова, но в консоли, которая не создает новый файл. если вы также знаете причину этого, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 02 октября 2019

Прежде всего, ваша задача - заменить слова в файле test , которые не отображаются в файле train . Ваш код никогда не упоминает тестовый файл. Вы должны

  • Прочитать файл поезда, собрать, какие слова там. Это в основном нормально;но вам нужно .strip() ваш line или последнее слово в каждой строке оканчивается новой строкой. Кроме того, было бы более разумно использовать set вместо dict, если вам не нужно знать счет (а вам нет, вы просто хотите знать, есть он или нет). Наборы - это круто, потому что вам не нужно заботиться о том, находится ли элемент уже или нет;Вы просто добавляете его. Если вам абсолютно необходимо знать количество, использовать collections.Counter проще, чем делать это самостоятельно.

  • Прочитайте файл test инапишите в файл замены, так как вы заменяете слова в каждой строке. Что-то вроде:

    с open ("test", "rt") в качестве читателя: с open ("replace", "wt") в качестве писателя: для строки в читателе: writer.write (replace_line (line. strip ()) + "\ n")

  • Имеет смысл, чего не делает ваш последний блок: P Вместо того, чтобы видеть, видно ли слово из тестового файла или нет, и заменятьневидимые, вы перебираете слова, которые вы видели в файле поезда, и пишете <unk>, если вы видели их ровно один раз. Это что-то делает, но не совсем близко к тому, что должно.

    Вместо этого разбейте строку, полученную из тестового файла, и итерируйте по ее словам;если слово находится в видимом множестве (буквально word in seen), то заменить его содержимое;и, наконец, добавить его в выходное предложение. Вы можете сделать это в цикле, но вот понимание, которое делает это:

    new_line = ' '.join(word if word in seen else '<unk>'
                        for word in line.split(' '))
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...