0
可以說我有一個字符串,並且希望標記一些實體,如人員和位置。spaCy nlp - 字符串中的標記實體
string = 'My name is John Doe, and I live in USA'
string_tagged = 'My name is [John Doe], and I live in {USA}'
我想用{}和具有{}的位置標記人員。
我的代碼:那麼與示例串
import spacy
nlp = spacy.load('en')
doc = nlp(string)
sentence = doc.text
for ent in doc.ents:
if ent.label_ == 'PERSON':
sentence = sentence[:ent.start_char] + sentence[ent.start_char:].replace(ent.text, '[' + ent.text + ']', 1)
elif ent.label_ == 'GPE':
sentence = sentence[:ent.start_char] + sentence[ent.start_char:].replace(ent.text, '{' + ent.text + '}', 1)
print(sentence[:ent.start_char] + sentence[ent.start_char:])
能正常工作。但是,對於更復雜的句子,我會在某些實體周圍得到雙重的qoutes。對於這個句子。
string_bug = 'Canada, Canada, Canada, Canada, Canada, Canada'
回報>> {Canada}, {Canada}, {Canada}, {Canada}, {{Canada}}, Canada
爲什麼我分裂了一句串2是隻能更換新詞(具有較高的字符位置)的原因......我覺得這個錯誤可能是我在循環在doc.ents中,所以我得到了我的字符串的舊位置,並且每個循環都使用新的[]和{}來增加字符串。但感覺像spaCy中必須有一些更簡單的方法來處理這個問題。
編輯:帶倒車(doc.ents)解決