如何使用 spaCy 在句子中标记动词? (python)

How to mark a verb in a sentence using spaCy? (python)

我想通过在动词词尾添加 'X' 来标记句子中的动词,例如 verbX

SpaCy 将标签分配给 Python 未单独索引的句子元素。例如,spaCy 将单词 . 后面的括号 ( 或句号视为单独的位置,而 Python 则不会。结果,标签的索引不能用于可靠地将 X 插入到句子中。以下函数通过从标记重建句子来工作。但是,它只允许我在动词的开头插入 X。

有没有办法像这样 verbX 将 X 贴在动词的末尾? (动词和 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."

问题是你的操作顺序,要达到你想要的结果应该是:

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