Я использовал простой пример кода для извлечения отношений сущностей. Код работает нормально, если есть предложение типа «Доход MacDonald в прошлом году составил 1 миллион долларов».
Но когда я попробовал предложение «Доход MacDonald's составил 1 миллион долларов в прошлом году и 2 миллиона долларов в этом году». это показывает мне тот же результат, что и выше. Может ли кто-нибудь помочь мне изменить код, чтобы я мог получить желаемый результат.
import spacy
TEXTS = ["MacDonald's revenue was $1 million last year and $2 million this year "]
def extract_currency_relations(doc):
# merge entities and noun chunks into one token
spans = list(doc.ents) + list(doc.noun_chunks)
for span in spans:
span.merge()
relations = []
for money in filter(lambda w: w.ent_type_ == "MONEY", doc):
if money.dep_ in ("attr", "dobj"):
#subject = [w for w in money.head.lefts if w.dep_ == "nsubj"]
subject = [w for w in money.head.lefts if w.dep_ == "nsubj"]
if subject:
subject = subject[0]
relations.append((subject, money))
elif money.dep_ == "pobj" and money.head.dep_ == "prep":
relations.append((money.head.head, money))
return relations
model="en_core_web_sm"
nlp = spacy.load(model)
print("Loaded model '%s'" % model)
print("Processing %d texts" % len(TEXTS))
for text in TEXTS:
doc = nlp(text)
relation = extract_currency_relations(doc)
for r1, r2 in relation:
print("\n\n","{:<10}\t{}\t{}".format(r1.text, r2.ent_type_, r2.text))
Я ожидаю, что результат составит '' ' Доход MacDonald ДЕНЬГИ $ 1 млн. ' ''
'' ' Доход MacDonald's ДЕНЬГИ $ 2 млн. ' ''
Но фактический объем производства составляет всего '' ' Доход MacDonald'а ДЕНЬГИ $ 1 млн. ' ''