Я использую spacy, чтобы идентифицировать различные типы узоров. шаблон в основном имеет такую форму:
pattern = [{"POS": "ADV"},
{"POS": "AUX"},
{"LOWER": "pas"},
{"POS": "ADV"},] # ADV, NOUN, ADJ
pattern2 = [{"POS": "ADV"},
{"POS": "AUX"},
{"LOWER": "pas"},
{"POS": "ADJ"},]``
Я пытаюсь проверить значение последнего тега сообщения моего шаблона в лексиконе. Как видите, это либо прил., Либо нар. Итак, если слово в этом месте есть в моем словаре. Я могу добавить предложения в мой новый список.
Я даю вам небольшую правку моего кода, потому что он возвращает мне пустой список. Итак, если вы можете помочь понять, как это сделать, я буду признателен за любую помощь.
import spacy.attrs
from spacy.attrs import POS
import spacy
from spacy.lang.fr import French
from spacy.tokenizer import Tokenizer
from spacy.util import compile_prefix_regex, compile_infix_regex, compile_suffix_regex
nlp = spacy.load("fr_core_news_md")
from spacy.matcher import Matcher
sentence = ["Voyons ce n'est pas mal ce que vous faites", "Vive la vie.", " Vous n'êtes pas bien.",
"Je ne suis pas mauvaise","Jeune gens mangez bien", "Ce n'est pas mauvais", "il est peu scrupuleux",
" il manque d'amour ou de conséridation",
" il est sans merci",
" il est trop cher"
" il est de mauvaise qualité",
"il est dépourvu de sens",
]
pattern = [{"POS": "ADV"},
{"POS": "AUX"},
{"LOWER": "pas"},
{"POS": "ADV"},] # ADV, NOUN, ADJ
pattern2 = [{"POS": "ADV"},
{"POS": "AUX"},
{"LOWER": "pas"},
{"POS": "ADJ"},]
pattern3 = [{"LOWER": "peu"},
{"POS": "ADJ"},]
matcher = Matcher(nlp.vocab)
matcher.add("matching_1", None, pattern, pattern3, pattern2)
lexique =['bien', 'gentil', 'long','scrupuleux']
f = open("file.txt", "w")
print("token --> lemme --> dep -->pos ")
for sent in sentence:
doc=nlp(sent)
for tok in doc:
print(tok.text, "\t", tok.lemma_, "-->", tok.dep_, "-->", tok.pos_)
sent_extract=[]
for sent in sentence:
doc=nlp(sent)
print([t.text for t in doc])
matches= matcher(doc)
for match_id, start, end in matches:
span = doc[start:end]
print("found match:", span)
if span.text in sent:
if span.text[-1] in lexique:
sent_extract.append(sent)
print(sent_extract)
Печать sent_extract дает:
['Voyons', 'ce', "n'", 'est', 'pas', 'mal', 'ce', 'que', 'vous', 'faites']
found match: n'est pas mal
['Vive', 'la', 'vie', '.']
[' ', 'Vous', "n'", 'êtes', 'pas', 'bien', '.']
found match: n'êtes pas bien
['Je', 'ne', 'suis', 'pas', 'mauvaise']
found match: ne suis pas mauvaise
['Jeune', 'gens', 'mangez', 'bien']
['Ce', "n'", 'est', 'pas', 'mauvais']
found match: n'est pas mauvais
['il', 'est', 'peu', 'scrupuleux']
found match: peu scrupuleux
[' ', 'il', 'manque', "d'", 'amour', 'ou', 'de', 'conséridation']
# Result :
[]
Как видите, "scrupuleux" найдено в моем лексиконе, но возвращенный список пуст. Прошу вас, помогите мне найти, что я делаю не так?