我试图替换字符串中的位置名称,并将其随机替换为下面提到的列表中的任何城市,然后获取新的字符串并将其附加到文件中。我试着用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
。