簡體   English   中英

如何迭代具有空間的列以獲取命名實體?

[英]How can I iterate on a column with spacy to get named entities?

我得到了一個 dataframe ,其中有一列名為“類別”。 該列的一些數據看起來像這樣{[], [], [amazon], [clothes], [telecommunication],[],...} 每行只有一個值。 我現在的任務是為這些值賦予它們的實體。 我嘗試了很多,但它沒有 go 很好。 這是我的第一次嘗試

import spacy
nlp = spacy.load("de_core_news_sm")
doc=list(nlp.pipe(df.categories))
print([(X.text, X.label_) for X in doc.ents])
AttributeError 'list' object has no attribute 'ents'
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
in ----> 1 print([(X.text, X.label_) for X in doc.ents])
AttributeError: 'list' object has no attribute 'ents'

我的第二次嘗試:

for token in doc:
print(token.doc, token.pos_, token.dep_)
AttributeError 'spacy.tokens.doc.Doc' object has no attribute 'pos_'
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
in 1 for token in doc: ----> 2 print(token.doc, token.pos_, token.dep_)
AttributeError 'spacy.tokens.doc.Doc' object has no attribute 'pos_'

第三次嘗試:

docs = df["categories"].apply(nlp)
for token in docs:
    print(token.text, token.pos_, token.dep_)
AttributeError 'spacy.tokens.doc.Doc' object has no attribute 'docs'
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
in 1 docs = df["categories"].apply(nlp) 2 for token in docs: ----> 3              print(token.docs, token.pos_, token.dep_) 
AttributeError: 'spacy.tokens.doc.Doc' object has no attribute 'docs'

我只想在此列上迭代 spacy,以便為我提供一個實體的值。 對於空值,它不應該給我任何實體。 該列是一個字符串。 感謝幫助。

您有許多doc的列表,您必須使用額外for -loop 來分別處理每個文檔。

docs = list(nlp.pipe(df.categories))   # variable `docs` instead of `doc`

for doc in docs:   
    print([(X.text, X.label_) for X in doc.ents])

docs = list(nlp.pipe(df.categories))   # variable `docs` instead of `doc`

for doc in docs:   
    for token in doc:
        print(token.text, token.pos_, token.dep_)

文檔語言處理管道顯示它像

for doc in nlp.pipe(df.categories):   
    print([(X.text, X.label_) for X in doc.ents])
    for token in doc:
        print(token.text, token.pos_, token.dep_)

同樣的問題是apply(nlp)

docs = df["categories"].apply(nlp)

for doc in docs:
    for token in doc:
        print(token.text, token.pos_, token.dep_)

完整的工作示例:

import spacy
import pandas as pd

df = pd.DataFrame({
    'categories': ['amazon', 'clothes', 'telecommunication']
})

nlp = spacy.load("de_core_news_sm")

print('\n--- version 1 ---\n')

docs = list(nlp.pipe(df.categories))

for doc in docs:
    print([(X.text, X.label_) for X in doc.ents])
    
    for token in doc:
        print(token.text, token.pos_, token.dep_)

print('\n--- version 2 ---\n')

docs = df["categories"].apply(nlp)

for doc in docs:
    for token in doc:
        print(token.text, token.pos_, token.dep_)

暫無
暫無

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

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