Предположим, у меня есть список (new_list
) с 3000 предложениями, где каждое предложение разделено запятой (,
).
Пример (часть):
new_list = ['air purity controller, to detect pollution and letting cold air in', 'air quality in my home by air conditioning', 'air conditioner depending on home', 'household alarm clock for time']
Я хочу заменить определенные слова (одно слово или фразу) из new_list
, добавив некоторые специальные символы (в начале и в конце),Я делаю это с помощью набора.
Пример набора:
dict = {'air conditioner', 'air', 'air quality', 'house', 'air conditioning', 'alarm clock'}
Размер набора (дикт) - 317. Я хочу отсканировать каждое слово изnew_list
и заменить при совпадении с набором, добавив специальные символы в начальную и конечную позиции.Кроме того, если найдено совпадение и полученное слово является фразой из набора, то дополнительно добавляется специальный символ (_) между ними и добавляется специальный символ в начальной и конечной точках.
У меня естьпытался, но не удалось.Пожалуйста, предложите, где я иду не так (я так не думаю, я не прав).new_list
и dict показаны выше.
import re, csv, nltk
from nltk.corpus import stopwords
from nltk import regexp_tokenize
with open("raw_data.txt", 'r', encoding = 'utf-8') as f1:
reader = csv.reader(f1, skipinitialspace=True)
new_list = next(reader)
with open('updatd_file.txt', 'w', encoding='utf-8') as f2:
dic = {'air conditioner', 'air quality', 'air conditioning', 'air', 'house', 'alarm clock'}
dic = {i : i.replace(' ', '_') for i in dic}
pattern = re.compile(r"\b("+"|".join(dic)+r")\b")
modify_reqs = [pattern.sub(lambda x: "_{}_".format(dic[x.group()]), i) for i in new_list]
sw = (stopwords.words('english'))
unfiltered_tokens = [[word for word in regexp_tokenize(word, pattern=r"\s|[\d]|[^\wa-z+]", gaps=True) if word not in sw] for word in modify_reqs]
f2.write(str(unfiltered_tokens))
Я выполняю эту программу и записываю результаты в файл.Когда я проверяю выходной файл, я вижу слова в нужном порядке (не хватает нескольких слов), но иногда я не вижу этого.Как это странное поведение, я не могу понять и исследовать.
Иногда я могу найти фразу в правильном порядке (как и ожидалось), то есть '_air_conditioning_'
, но в следующий раз, когда я выполню этот фрагмент, я найду то же слово, что и '_air_'
, 'conditioning'
(отделено).То же самое произошло и с другими фразами, такими как air quality
, air conditioning
и т. Д. Проблема связана с фразами, а не с одним словом.Обратите внимание, что в наборе (dict) у меня 317 слов и new_list
, содержащих почти 3000 предложений.Не возможно показать все здесь.Как это возможно?Я пытаюсь это с 7-8 дней, это расстраивает сейчас.