Сравнение слов из разных файлов

Я новичок в Python и застрял над проблемой. Я написал код для определения общего количества слов, а также уникального количества слов в нескольких файлах (в данном случае файлы .txt являются главами книги: образец текста из файла1 "Спорный период времени, когда причины изменчивости какими бы они ни были, обычно действуют; будь то в течение раннего или позднего периода развития эмбриона или в момент зачатия. "; образец текста из файла2" Наконец, тогда разновидности имеют те же общие признаки, что и виды, поскольку их нельзя отличить от видов, кроме, во-первых, открытием промежуточных форм сцепления »).

Я не могу найти в Интернете примеров того, как сравнивать слова в файлах. Мне нужно определить количество слов, используемых в файлах, и количество слов, уникальных для каждого файла (относительно другого файла (ов)). Мой окончательный результат должен включать 7 чисел: общее количество слов для file1 и file2, уникальное количество слов для file1 и file2, # слов, совместно используемых между file1 и file2, # слов в file1, но не в file2, и, наконец, # слов в file2 но не в file1. Я знаю, что для этого мне нужно использовать set (), но я не понимаю, как это сделать.

import glob
from collections import Counter

path = "c-darwin-chapter-?.txt"

wordcount = {}

for filename in glob.glob(path):
  with open("c-darwin-chapter-1.txt", 'r') as f1, open("c-darwin-chapter-2.txt", 'r') as f2:
      f1_word_list = Counter(f1.read().replace(',','').replace('.','').replace("'",'').replace('!','').replace('&','').replace(';','').replace('(','').replace(')','').replace(':','').replace('?','').lower().split())

      print("Total word count per file: ", sum(f1_word_list.values()))
      print("Total unique word count: ", len(f1_word_list))

      f2_word_list = Counter(f2.read().replace(',','').replace('.','').replace("'",'').replace('!','').replace('&','').replace(';','').replace('(','').replace(')','').replace(':','').replace('?','').lower().split())

      print("Total word count per file: ", sum(f2_word_list.values()))
      print("Total unique word count: ", len(f2_word_list))

#if/main commented out but final code must use if/main and loop
#if __name__ == '__main__':
#   main()

Желаемый результат:

Total word count
   Chapter1 = 11615
   Chapter2 = 4837

Unique word count
   Chapter1 = 1991
   Chapter2 = 1025

Words in Chapter1 and Chapter2: 623
Words in Chapter1 not in Chapter2: 1368
Words in Chapter2 not in Chapter1: 402

Вы должны включить в свой вопрос два образца текста (как текст, а не изображения), а также желаемый результат.

rahlf23 24.10.2018 21:33

Текстовые файлы - это главы книги (они ОЧЕНЬ длинные), и в прошлом мне говорили не публиковать очень длинные вопросы, поэтому я не включил их. Будет обновлено, чтобы включить желаемый результат

Lola 24.10.2018 21:35

Я бы просто включил образцы текста небольшой, чтобы у тех, кто отвечает, были данные для работы.

rahlf23 24.10.2018 21:40

Хорошо, я обновлю вопрос, чтобы отразить это; благодарю вас!

Lola 24.10.2018 21:48

Прочтите про class set([iterable]). Соответствующий поиск-пересечение-парных-типизированных-списков-коллекций-строк-в-ру

stovfl 24.10.2018 21:54
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
173
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы читаете оба файла и конвертируете прочитанный текст в списки / наборы. Используя наборы, вы можете использовать операторы набора для вычисления пересечений / различий между ними:

s.intersection(t)    s & t    new set with elements common to s and t  
s.difference(t)      s - t    new set with elements in s but not in t

An explanatory table of set-operations can be found here: Doku 2.x / valid for 3.7 as well

Демо:

file1 = "This is some text in some file that you can preprocess as you " +\
        "like. This is some text in some file that you can preprocess as you like."

file2 = "this is other text about animals and flowers and flowers and " +\
        "animals but not animal-flowers that has to be processed as well"

# split into list - no .lower().replace(...) - you solved that already
list_f1 = file1.split() 
list_f2 = file2.split()

# create sets from list (case sensitive)
set_f1 = set( list_f1 )
set_f2 = set( list_f2 )

print(f"Words: {len(list_f1)} vs {len(list_f2)} Unique {len(set_f1)} vs {len(set_f2)}.")
# difference
print(f"Only in 1: {set_f1-set_f2} [{len(set_f1-set_f2)}]")
# intersection
print(f"In both {set_f1&set_f2} [{len(set_f1&set_f2)}]")
# difference the other way round
print(f"Only in 2:{set_f2-set_f1} [{len(set_f2-set_f1)}]")

Выход:

Words: 28 vs 22 Unique 12 vs 18.
Only in 1: {'like.', 'in', 'you', 'can', 'file', 'This', 'preprocess', 'some'} [8]
In both {'is', 'that', 'text', 'as'} [4]
Only in 2:{'animals', 'not', 'but', 'animal-flowers', 'to', 'processed',
           'has', 'be', 'and', 'well', 'this', 'about', 'other', 'flowers'} [14]

Вы уже обрабатываете чтение файла и "объединение" в нижний регистр - я оставил это здесь. В выходных данных используется синтаксис интерполяции строк для python 3.6: см. PEP 498

Другие вопросы по теме