Как найти недействительные маркеры грамматики ссылок?

Я хотел бы использовать привязки грамматики ссылок Python3 для простой проверки грамматики. Хотя API связывания относительно хорошо документирован, похоже, нет способа получить доступ ко всем токенам, которые предотвращают связывание.

Это то, что я до сих пор:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from linkgrammar import Sentence, ParseOptions, Dictionary, __version__
print('Link Grammar Version:', __version__)

for sentence in ['This is a valid sample sentence.', 'I Can Has Cheezburger?']:
    sent = Sentence(sentence, Dictionary(), ParseOptions())
    linkages = sent.parse()
    if len(linkages) > 0:
        print('Valid:', sentence)
    else:
        print('Invalid:', sentence)

(Я использовал link-grammar-5.4.3 для своих тестов.)

Когда я проанализировал недопустимое примерное предложение с помощью инструмента командной строки Link Parser, я получил следующий вывод:

linkparser> I Can Has Cheezburger?
No complete linkages found.
Found 1 linkage (1 had no P.P. violations) at null count 1
    Unique linkage, cost vector = (UNUSED=1 DIS= 0.10 LEN=7)

    +------------------Xp------------------+
    +------------->Wa--------------+       |
    |            +---G--+-----G----+       |
    |            |      |          |       |
LEFT-WALL [I] Can[!] Has[!] Cheezburger[!] ?

Как получить все потенциально недействительные токены, помеченные [!] Или [?] С помощью Python3?

1 ответ

Решение

Посмотрите, как это делается в bindings/python-examples/sentence-check.py, Лучше взглянуть на последнюю версию репо (текущую здесь), так как в этой демонстрационной программе была ошибка 5.4.3.

В частности, следующее извлекает список слов:

words = list(linkage.words())

Несвязанные слова обернуты внутри [], Слова, которые имеют [] к ним прилагаются угаданные. Например, [!] означает, что слово было классифицировано регулярным выражением (которое появляется в файле 4.0.regex) и эта классификация была затем найдена в словаре. Если вы установили параметр разбора display_morphology в Trueимя классифицирующего регулярного выражения появляется после !,

Вот полная легенда о формате вывода слова:

 [word]            Null-linked word
 word[!]           word classified by a regex
 word[!REGEX_NAME] word classified by REGEX_NAME (turn on by morphology=1)
 word[~]           word generated by a spell guess (unknown original word)
 word[&]           word run-on separated by a spell guess
 word[?]           word is unknown (looked up in the dict as UNKNOWN-WORD)
 word.POS          word found in the dictionary as word.POS
 word.#CORRECTION  word is probably a typo - got linked as CORRECTION

For dictionaries that support morphology (turn on by morphology=1):
 word=             A prefix morpheme
 =word             A suffix morpheme
 word.=            A stem

Может быть полезно сопоставить выходные слова со словами оригинального предложения, особенно в случае исправления заклинаний или когда морфология включена. Указанная демонстрационная программа sentence-check.py делает это, когда вы звоните с -p - см. код под if arg.position:,

В случае вашего демо-предложения I Can Has Cheezburger?только слово I не имеет связи, а другие слова были классифицированы как прописные слова и связаны как собственные существительные (G тип ссылки).

Вы можете найти больше информации о типах ссылок в Summaze-Links.

Другие вопросы по тегам