Итак, я пытаюсь найти точные слова из файла country.txt, который определяет названия мест с файлом описания ниже:
вот пример country.txt
Pic de Font Blanca
Roc Mélé
Pic des Langounelles
Pic de les Abelletes
Estany de les Abelletes
Port Vieux de la Coume d’Ose
Port de la Cabanette
Port Dret
Costa de Xurius
Font de la Xona
а вот описание .csv файл описания
Файл описаний - это список данных, который содержит заголовки и описания статьи . Я пытаюсь найти точные слова названия места из файла описания с файлом country.txt
code.py
import csv
import time
import re
allCities = open('country.txt', encoding="utf8").readlines()
timestr = time.strftime("%Y-%m-%d-(%H-%M-%S)")
with open('description.csv') as descriptions,open('desc_place7---' + str(timestr) + '.csv', 'w', newline='', encoding='utf-8') as output:
descriptions_reader = csv.DictReader(descriptions)
fieldnames = ['title', 'description', 'place']
output_writer = csv.DictWriter(output, delimiter='|', fieldnames=fieldnames)
output_writer.writeheader()
line=0
pattern = r'|'.join(r'\b{}\b'.format(re.escape(city.strip())) for city in sorted(allCities, key=len, reverse=True))
for eachRow in descriptions_reader:
title = eachRow['row']
description = eachRow['desc']
citiesFound = set()
found = re.findall(pattern, description, re.IGNORECASE | re.MULTILINE)
citiesFound.update(found)
if len(citiesFound)==0:
output_writer.writerow({'title': title, 'description': description, 'place': " - "})
else:
output_writer.writerow({'title': title, 'description': description, 'place': " , ".join(citiesFound)})
line += 1
print(line)
ожидается output : output
Но поскольку country.txt (185,94 МБ) является большим файлом, мой код не может работать полностью. Это заставляет мой ноутбук зависать. Есть ли хороший способ справиться с этим? Я думаю, что это также из-за линии шаблона, которая у меня низкая, но мне также нужно регулярное выражение для поиска точных слов