如何使用 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
我想通过在动词词尾添加 '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