簡體   English   中英

簡單 NER - IndexError:字符串索引超出范圍錯誤

[英]Simple NER - IndexError: string index out of range error

下面是使用Python中Natural Language Toolkit(nltk)庫中的命名實體識別工具進行命名實體識別(NER)的一個簡單例子:

導入 nltk

輸入文本

text = "Barack Obama 出生在夏威夷。他是美國第 44 任總統。"

標記文本

tokens = nltk.word_tokenize(文本)

執行命名實體識別

entities = nltk.ne_chunk(令牌)

打印命名實體

打印(實體)

當我在我的 Jupyter Notebook 中運行這段代碼時,出現了這個錯誤。

“IndexError:字符串索引超出范圍”

我缺少任何安裝嗎? 請指教。

預計 output:

(人物巴拉克/NNP 奧巴馬/NNP)(GPE 夏威夷/NNP)(組織美國/NNP 美國/NNPS)

nltk.ne_chunk期望其輸入被標記為標記,而不僅僅是普通標記,因此我建議通過nltk.pos_tag在標記化和 ne 分塊之間添加一個標記步驟。 ne chunking 仍然會為您提供每個標記,如果檢測到任何標記,則按實體進行分塊。 由於您只需要實體,因此您可以檢查特定塊中是否有樹。 像下面這樣:

text = "Barack Obama was born in Hawaii. He was the 44th President of the United States."
tokens = nltk.word_tokenize(text)
tagged_tokens = nltk.pos_tag(tokens)
entities = [chunk for chunk in nltk.ne_chunk(tagged_tokens) if isinstance(chunk, nltk.Tree)]

for entity in entities:
    print(entity)

請注意,此代碼並未准確給出您想要的 output。 相反,它給出:

(PERSON Barack/NNP)
(PERSON Obama/NNP)
(GPE Hawaii/NNP)
(GPE United/NNP States/NNPS)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM