Я хочу захватить все строки всех строк, присутствующих в столбце моего CSV-файла.В настоящее время захватывается только первая строка, но я хочу получить все строки, присутствующие в строке.Проблема сейчас заключается в том, что переменная «product» дает только первую строку названий продуктов, поэтому во втором случае (ABC2, ABC3, BCA3) из csv будет добавлена только ABC2, а два других имени будут игнорироваться, но яхочу добавить все элементы.Как мне перебрать эту строку, чтобы все элементы были добавлены, я опубликую пример моего кода и csv для справки:
import spacy
import re
import csv
from spacy.matcher import PhraseMatcher
#Function to convert PhraseMatcher return value to string indexes
def str_index_conversion(lbl, doc, matchitem):
o_one = len(str(doc[0:matchitem[1]]))
subdoc = doc[matchitem[1]:matchitem[2]]
o_two = o_one + len(str(subdoc))
return (o_one, o_two, lbl)
#nlp = spacy.blank('en')
nlp = spacy.load('en')
if 'ner' not in nlp.pipe_names:
ner = nlp.create_pipe('ner')
nlp.add_pipe(ner)
else:
ner = nlp.get_pipe('ner')
ner.add_label('PRODUCT')
DIR = 'C:\\Users\\Lenovo\\.spyder-py3\\smoke\\'
matcher = PhraseMatcher(nlp.vocab)
list_str_index = []
to_train_ents = []
with open('names.csv', newline='') as myFile:
reader = csv.reader(myFile)
for row in reader:
try:
product = row[0].lower()
filename = row[1]
file = open(DIR+filename, "r", encoding ='utf-8')
#print(file)
filecontents = file.read()
for s in filecontents:
filecontents = re.sub(r'\s+', ' ', filecontents)
#filecontents = filecontents.encode().decode('unicode-escape')
filecontents = ''.join([line.lower() for line in filecontents])
matcher.add('PRODUCT', None, nlp(product))
doc = nlp(filecontents)
matches = matcher(doc)
#print(matches)
list_str_index = [str_index_conversion('PRODUCT', doc, x) for x in matches]
to_train_ents.append((filecontents, dict(entities=list_str_index)))
break
except Exception as e:
#print(e)
pass```
SAMPLE CSV:
PRODUCT FILES
ABC XXXX
ABC2, ABC3, BCA3 XXXX
BC2 XXXX```