Как сделать, чтобы токенизация не трактовала сокращения и их встречные части как одинаковые при сравнении двух текстовых файлов? - PullRequest
0 голосов
/ 10 сентября 2018

В настоящее время я работаю над структурой данных, которая должна сравнивать два текстовых файла и составлять список общих для них строк. моя программа получает содержимое двух файлов в виде двух строк a & b (содержимое одного файла для каждой переменной). Затем я использую функцию tokenize в цикле for, чтобы разбить строку на каждое предложение. Затем они сохраняются в набор, чтобы избежать дублирования записей. Я удаляю все повторяющиеся строки в каждой переменной, прежде чем сравнивать их. Затем я сравниваю каждую из двух переменных друг с другом и сохраняю только общую строку. У меня есть ошибка, которая возникает в последней части, когда они сравниваются друг с другом. Программа будет относиться к сокращениям и их соответствующим контрагентам так же, как и не должна. Например, он будет читать «Не должен и не должен» как одно и то же и даст неправильный ответ. Я хочу, чтобы он не читал сокращения и их встречные части так же.

import nltk

def sentences(a, b): #the variables store the contents of the files in the form of strings
 a_placeholder = a
 set_a = set()
 a = []
 for punctuation_a in nltk.sent_tokenize(a_placeholder): 
  if punctuation_a not in set_a:
   set_a.add(punctuation_a)
   a.append(punctuation_a)

 b_placeholder = b
 set_b = set()
 b = []
 for punctuation_b in nltk.sent_tokenize(b_placeholder):
  if punctuation_b not in set_b:
   set_b.add(punctuation_b)
   b.append(punctuation_b)

 a_new = a
 for punctuation in a_new:
  if punctuation not in set_b:
   set_a.remove(punctuation)
   a.remove(punctuation)
  else:
   pass

 return []
...