Как мне вывести объемный результат отдельно для каждого файла?

#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)