(извините за мой английский, я тоже новичок в этом, так что будьте нежны, спасибо)
Я пытаюсь извлечь логическое утверждение (SWRL) из любого возможного предложения, содержащего действияи условия
Это логическое утверждение, которое я хотел бы получить:
IF (СОСТОЯНИЕ) THEN (ДЕЙСТВИЕ | НЕ ДЕЙСТВИЕ | ДЕЙСТВИЕ ИЛИ ДЕЙСТВИЕ)
Я пытался применить некоторые техники НЛП с Spacy и Стэнфордской библиотекой НЛП , но мое отсутствие знаний о грамматических структурах английского языкаделает это почти невозможным для меня.
Я хотел бы знать, может ли кто-нибудь помочь мне с этим исследованием, либо с идеями, либо с неизвестными для меня библиотеками.
Например:
import nltk
import spacy
nlp = spacy.load('en_core_web_sm')
sent="The speed limit is 90 kilometres per hour on roads outside built-up areas."
doc=nlp(sent)
Получение рута:
def sent_root(sent):
for index,token in enumerate(sent):
if token.head == token:
return token, index
Выход: (есть, 3)
Получение предмета:
def sent_subj(sent):
for index,token in enumerate(sent):
if token.dep_ == 'nsubj':
return token, index
Out: (предел, 2)
Получение детей (зависимостислова):
def sent_child(token):
complete_subj = ''
for child in token.children:
if(child.is_punct == False):
if(child.dep_ == 'compound'):
complete_subj += child.text + ' ' + token.text+' '
else:
complete_subj += child.text + ' '
for child_token in child.children:
if(child.is_punct == False):
complete_subj += child_token.text+' '
return complete_subj
Out: «Ограничение скорости»
Документация + root:
def doc_ents_root(sent, root):
ents_root = root.text+' '
for token in sent.ents:
ents_root += token.text + ' '
return ents_root
Выход: «90 километров в час»
Извлечение действия:
def action(sent):
#Obtaining the sent root
root, root_idx = sent_root(sent)
#Obtaining the subject
subj, subj_idx = sent_subj(sent)
#Obtaining the whole subject (subj + comps)
complete_subj = sent_child(subj)
complete_ents = doc_ents_root(sent, root)
return complete_subj + complete_ents
Применениевсе функции
action(doc)
Out: «Светофор с сигналом указывает»