如何取消激活已替换的spacy.tokens.token.token



我试图替换字符串中的位置名称,并将其随机替换为下面提到的列表中的任何城市,然后获取新的字符串并将其附加到文件中。我试着用spacy来做这个。我可以很容易地检测到城市并替换令牌,但我不得不添加它们来获得新的线路。

from pprint import pprint
import spacy
import random
list = ['Delhi','Mumbai','Bangalore','Agra','Jaipur','Noida','Lucknow','Bombay','Jaipur','Indore','Chandigarh','Guwahati','Ghaziabad','Faridabad',
'Pune','Chennai','kolkata','Hyderabad','Goa']
nlp = spacy.load('en_core_web_sm')
sentence = '''Can You deliver pizza to London.'''
entities = nlp(sentence)
pprint([(X, X.ent_iob_, X.ent_type_) for X in entities])
newstr=""
for X in entities:
newstr += X
if  X.ent_type_=='GPE' and X.ent_iob_=='B':
X = random.choice(list)
print(X)
#print(type(X))
elif X.ent_type_=='GPE' and X.ent_iob_=='I':
X= ' '

pprint(newstr)

我得到以下错误:

Traceback (most recent call last):
File "C:UsersshahiPycharmProjectspythonscrappingprojectmain.py", line 17, in <module>
newstr += X
TypeError: can only concatenate str (not "spacy.tokens.token.Token") to str

当我试着用注释out运行这个时-newstr+=X;它运行良好。

首先,不要使用内置的list作为变量名,使用l,例如:

l = ['Delhi','Mumbai','Bangalore','Agra','Jaipur','Noida','Lucknow','Bombay','Jaipur','Indore','Chandigarh','Guwahati','Ghaziabad','Faridabad',
'Pune','Chennai','kolkata','Hyderabad','Goa']

然后,你可以使用

for X in entities:
if  X.ent_type_=='GPE' and X.ent_iob_=='B':
newstr += random.choice(l) + X.whitespace_
else:
newstr += X.text + X.whitespace_

其中X.text是实际的令牌文本,而X.whitespace_是原始字符序列中该令牌之后的空白。

尝试通过写入newstr += str(X)spacy.tokens.token.Token类型转换为str

最新更新