#python #spacy
#python #объемный
Вопрос:
Я использую следующий код python для вывода названий организаций в файлах в каталоге на моем компьютере
nlp = spacy.load('en_core_web_sm')
my_path = "/path/to/file/directory"
files = os.listdir(my_path)
myset = []
for file in files:
newpath = (os.path.join(my_path, file))
newpath1 = textract.process(newpath)
newpath2 = newpath1.decode("utf-8")
doc = nlp(newpath2)
for ent in doc.ents:
if ent.label_=="ORG":
myset.append(ent.text)
print(myset)
Это выводит следующее:
['Apple', 'Tesla', 'Ford', 'Honda', 'IBM', 'Microsoft', 'Walmart', 'McDonalds']
Проблема в том, что он не разделяет результаты по файлам. Он берет названия организаций из всех файлов и помещает их в ОДИН список. В идеале я хочу, чтобы мои результаты были сгруппированы по файлам. Например, что-то вроде этого:
[(Apple, Tesla), (Ford, Honda), (IBM), (Microsoft, Walmart, McDonalds)]
РЕДАКТИРОВАТЬ: нашел ответ и опубликовал его ниже. Кричите пользователю @AMC
Комментарии:
1. Можете ли вы уточнить, в чем проблема? Не могли бы вы создать список для каждого файла, добавить имена в этот список и в конце
for file in files
цикла добавить этот список в «основной»?2. @AMC Понял. Спасибо!
Ответ №1:
Нашел ответ, благодаря пользователю @AMC. Я создал список для каждого файла, добавил названия организаций в этот список, а затем добавил каждый список в основной список следующим образом:
nlp = spacy.load('en_core_web_sm')
my_path = "/path/to/directory"
files = os.listdir(my_path)
myset = []
for file in files:
newpath = (os.path.join(my_path, file))
newpath1 = textract.process(newpath)
newpath2 = newpath1.decode("utf-8")
doc = nlp(newpath2)
subset = []
for ent in doc.ents:
if ent.label_=="ORG":
subset.append(ent.text)
myset.append(subset)
print(myset)