Использование тегов Syntaxnet POS в python?

Я хочу использовать теги синтаксического анализатора (например: VBD ROOT, NN nsubj и т. д.) синтаксической сети в python, чтобы помочь создать чат-бота. Ввод осуществляется в консоли.

Вопрос: Как получить в переменной результат только VBP ROOT и ничего больше? Я смог распечатать ASCII-версию дерева синтаксического анализа с помощью этого вызова: subprocess.call(["echo 'Bob brought the pizza to Alice.' | syntaxnet/demo.sh"], shell =True), но я немного запутался в том, как добраться до определенной переменной и сохранить ее в переменной python.

p.s. Я начал изучать python неделю назад.


person Mrtnchps    schedule 26.06.2016    source источник


Ответы (3)


Если вы новичок в Python и все, что вы хотите использовать, это теги части речи (POS), SyntaxNet, вероятно, является излишним. SpaCy прост в использовании и достаточно точен.

person Ken Arnold    schedule 08.07.2016

Я также новичок как в python, так и в SyntaxNet. Что я сделал, так это то, что я изменил вывод SyntaxNet из дерева в текстовый файл с разделителями табуляции, удалив

  bazel-bin/syntaxnet/conll2tree \
  --task_context=$MODEL_DIR/context.pbtxt \
  --alsologtostderr

из demo.sh в папке SyntaxNet. Запустите эту команду echo 'open Book, which I have written with laboratory writer, with libreoffice writer.' | syntaxnet/demo.sh > output.txt

Текстовый файл такой:

введите здесь описание изображения

Затем вы можете прочитать данные с помощью csv.reader, преобразовать их в list, а затем выполнить поиск в столбце 4 из sublists (номера столбцов начинаются с «0») и в столбце 7 найти ROOT

Я помещаю код приведенного выше объяснения:

#read from Syntaxnet output tab delimited textfile
def readata(filename):
      file=open(filename,'r')
      lines=file.readlines()
      lines=lines[:-1]
      data=csv.reader(lines,delimiter='\t')
#make a list of lists
      lol=list(data)
      return  lol
#find the verb which is ROOT of the sentence
      lists=readata(filename)
      for sublist in lists:
            if sublist[7]=='ROOT' and sublist[4]=='VBP': 
                  word=sublist[1]

Обратите внимание, что этот код написан большим человеком, но, по крайней мере, он работал у меня.

person Nazanin Tajik    schedule 13.07.2016

Я написал простой пост в своем блоге, показывающий, как загрузить выходные данные синтаксической сети в структуры NLTK, чтобы получить фразы-существительные на основе PoS и зависимостей в DependencyGraph:

http://www.davidsbatista.net/blog/2017/03/25/syntaxnet/

person David Batista    schedule 13.04.2017