Как пометить глагол в предложении, используя spaCy?питон - PullRequest
0 голосов
/ 03 июня 2018

Я хочу пометить глаголы в предложениях, добавив 'X' в конце слова глагола, например: verbX.

SpaCy назначает теги элементам предложений, которые Python не индексирует отдельно.Например, spaCy видит скобку '(' или точку с запятой за словом '.' Как отдельную позицию, а Python - нет. В результате индекс тегов не может быть использован для надежной вставки X в предложение.Следующая функция работает путем восстановления предложения по токенам, однако позволяет мне вставить только X в начале глагола.

Есть ли способ прикрепить X к концу слова глагола, вот так verbX? (без пробела между глаголом и X.)

import pandas as pd
import spacy
nlp = spacy.load('en')

s = "Dr. John (a fictional chartacter) never shakes hands."
df = pd.DataFrame({'sentence':[s]})
k = df['sentence']

def marking(row):
    chunks = []
    for token in nlp(row):
        if token.tag_ == 'VBZ':
            chunks.append('X')
        chunks.append(token.text_with_ws)
    L = "".join(chunks)
    return L
x = k.apply(marking)
print(x)   

Это дает:

"Dr. John (a fictional chartacter) never Xshakes hands."

Как я могу получить это?

"Dr. John (a fictional chartacter) never shakesX hands."

1 Ответ

0 голосов
/ 03 июня 2018

Проблема заключается в том, в каком порядке вы выполняете свои операции; для достижения желаемого результата это должно быть:

def marking(row):
    chunks = []
    for token in nlp(row):
        chunks.append(token.text_with_ws) #Append word first
        if token.tag_ == 'VBZ':
            chunks.append('X')            #Append 'X' second
    L = "".join(chunks)
    return L

Чтобы 'X' был прикреплен непосредственно к глаголу, перемещая любые конечные пробелы вконец, используйте эту логику:

def marking(row):
    chunks = []
    for token in nlp(row):
        if token.tag_ == 'VBZ':
            chunks.append(token.text + 'X' + token.whitespace_)
        else:
            chunks.append(token.text_with_ws)
    L = "".join(chunks)
    return L
...