Вопрос или проблема
Я ищу инструменты (возможно, в NLTK) или статьи, которые говорят о следующем:
например. Ввод: Vase(Subject1) put(verb)
Ответ, который я ищу: flower, water
Существует ли инструмент, который может выдать субъекты (объекты), которые могут быть связаны с этим глаголом? (Я проверял VerbNet, но ничего не нашёл)
Если вам нужно что-то быстрое, я думаю, что pattern — это лучший инструмент для этой задачи. Он предоставляет готовый многоязычный парсер, который вы можете использовать следующим образом:
import pattern
from pattern.en import parse
s="I put water in the vase"
s = parse(s)
print s
# вывод = I/PRP/B-NP/O put/VBP/B-VP/O water/NN/B-NP/O in/IN/B-PP/B-PNP the/DT/B-NP/I-PNP vase/NN/I-NP/I-PNP
Как только у вас есть строка, такая как output
выше, вам нужно только парсинг с помощью регулярных выражений, чтобы извлечь каждую последовательность токенов, теги которой соответствуют последовательности [B-NP, B-VP, B-NP].
NP означает “существительное словосочетание”, а VP означает “глагольное словосочетание”. В английском языке практически каждая последовательность, состоящая из существительного словосочетания, глагольного словосочетания и второго существительного словосочетания, все в строгой смежности, является последовательностью субъект-глагол-объект, так что это должно дать вам то, что вы ищете.
Парсер pattern
также сможет обрабатывать некоторые нестрогие смежности (например, промежуточные наречия и прилагательные между тремя фразами в последовательности субъект-глагол-объект).
Однако pattern
не особенно сложен — это даст вам некоторую точность и некоторый полноту, но не очень высокие цифры. Если вам нужно качественное парсинг, вам стоит попробовать Python реализацию парсера Стэнфорда или spacy.
Надеюсь, это поможет!
Ответ или решение
Для поиска возможных субъектов в контексте заданного глагола в домене повседневных объектов, таких как «ваза» и «положить», можно использовать различные инструменты и подходы обработки естественного языка (NLP). В данном ответе я подробно рассмотрю несколько подходов, а также предложу несколько инструментов, включая NLTK, Stanford NLP и SpaCy.
1. Использование библиотеки Pattern
Pattern — удобный инструмент для быстрого синтаксического разбора в различных языках, включая английский. Он позволяет легко анализировать предложения для извлечения элементов, соответствующих заданным тегам.
Пример использования:
import pattern
from pattern.en import parse
s = "I put water in the vase"
s = parse(s)
print(s)
# Вывод: I/PRP/B-NP/O put/VBP/B-VP/O water/NN/B-NP/O in/IN/B-PP/B-PNP the/DT/B-NP/I-PNP vase/NN/I-NP/I-PNP
Из разобранной строки вы можете с помощью регулярных выражений извлечь последовательности токенов, соответствующие тегам [B-NP, B-VP, B-NP], что позволит получить фразы, связанные с предметом и действием.
2. Stanford Parser
Stanford Parser является более мощным инструментом для синтаксического разбора и может обрабатывать более сложные структуры предложений. Он способен повышать точность извлечений за счет глубокого анализа лексем в предложении. Для использования необходимо установить инструмент и взаимодействовать с ним через Python.
Пример:
Сначала установите Stanford Parser, а затем выполните следующий код:
import stanfordnlp
nlp = stanfordnlp.Pipeline()
doc = nlp("I put water in the vase")
После этого вы сможете извлечь необходимые субъектно-объектные конструкции, обработав результат анализа.
3. SpaCy
SpaCy — это современная и быстрая библиотека NLP, которая предоставляет мощные инструменты для обработки текстов с высоким качеством:
Пример использования:
import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("I put water in the vase")
for token in doc:
if token.dep_ == "ROOT": # Определить корень предложения (глагол)
subjects = [child.text for child in token.children if child.dep_ == "nsubj"]
objects = [child.text for child in token.children if child.dep_ in ("dobj", "prep")]
print("Subjects:", subjects)
print("Objects:", objects)
Заключение
Каждый из перечисленных инструментов имеет свои сильные и слабые стороны. Pattern подходит для быстрого прототипирования, в то время как Stanford Parser и SpaCy предлагают более глубокую и мощную обработку информации. Выбор инструмента зависит от ваших конкретных нужд и требуемого уровня точности.
Если вам нужно достичь высоких показателей качества и полноты, рекомендую использовать сочетание этих инструментов — например, быстрое получение результатов через Pattern, а затем детальную проверку или более сложные задачи с помощью SpaCy или Stanford Parser.
Эта информация предназначена для исследователей и практиков в области обработки естественного языка, стремящихся найти и использовать подходящие инструменты для анализа текста в рамках своих проектов.