Вы пытаетесь получить два значения из split
:
word, freq = line.split()
Это будет работать только в том случае, если в строке ровно два слова (а при именовании переменной второе, по-видимому, должно быть подсчетом частоты).
Другая проблема заключается в том, что вы потребляете все строки из первого файла при print
их. Как только вы прочитали все строки из дескриптора, попытка прочитать больше строк просто ничего не даст. Простое исправление состоит в том, чтобы печатать и сохранять каждое входное слово в наборе words
внутри одного цикла. (Возможно, закомментируйте print()
, на самом деле; или import logging
и измените его на logging.debug()
. Это также гарантирует, что диагностический вывод не будет смешан с обычным стандартным выводом программы.)
В Python 3 UTF-8 должна быть кодировкой по умолчанию на большинстве здравомыслящих платформ (хотя это явно и категорически исключает Windows); возможно вам вообще не нужен явный codecs
.
Наконец, вы должны знать, что Unicode часто может представлять одну и ту же строку несколькими способами. Я не читаю по-арабски, но вкратце, например, вы можете написать «salaam» как один глиф U + FDF5 или записать его по буквам. Нормализация Unicode пытается сгладить любые такие складки, чтобы вы могли быть уверены, что текст, который отображает то же самое, также написан так же, и, следовательно, идентичен оператору сравнения строк Python.
import codecs
import unicodedata
with codecs.open('poswords.txt', 'r', 'UTF-8') as f1:
words = set()
for line in f1:
print(line)
words.add(unicodedata.normalize('NFC', line.strip()))
with codecs.open('0001b.txt', 'r', 'UTF-8') as f2:
for line in f2:
for word in line.split():
if unicodedata.normalize('NFC', word) in words:
print (word)