Python 将NER(命名实体识别)作为dataframe中的新列进行操作的任何解决方法?

Python 将NER(命名实体识别)作为dataframe中的新列进行操作的任何解决方法?,python,pandas,nltk,Python,Pandas,Nltk,我有celebirty新闻数据集,我可以从中提取名称实体识别。最初,我想出了如何使用nltk工具从句子列表中获得连续的NER(命名实体识别)。现在我想按主题、位置和主主题拆分NER,并将它们添加为新列。以下是我尝试过的: from nltk import ne_chunk, pos_tag, word_tokenize from nltk.tree import Tree import nltk nltk.download('maxent_ne_chunker') nltk.download(

我有celebirty新闻数据集,我可以从中提取名称实体识别。最初,我想出了如何使用
nltk
工具从句子列表中获得连续的NER(命名实体识别)。现在我想按主题、位置和主主题拆分NER,并将它们添加为新列。以下是我尝试过的:

from nltk import ne_chunk, pos_tag, word_tokenize
from nltk.tree import Tree

import nltk
nltk.download('maxent_ne_chunker')
nltk.download('words')

def get_continuous_chunks(text):
    chunked = ne_chunk(pos_tag(word_tokenize(text)))
    continuous_chunk = []
    current_chunk = []
    for i in chunked:
        if type(i) == Tree:
            current_chunk.append(" ".join([token for token, pos in i.leaves()]))
        elif current_chunk:
            named_entity = " ".join(current_chunk)
            if named_entity not in continuous_chunk:
                continuous_chunk.append(named_entity)
                current_chunk = []
            else:
                continue
    return continuous_chunk
以下是上述辅助函数的输出:

res=[]
for x in df.sentences:
    ner=get_continuous_chunks(x)
    res.append(ner)
[['Jennifer Aniston','ITV','NBC','Aniston',['Brangelina',
“布拉德·皮特”、“安吉丽娜·朱莉”、“布拉德”、“朋友”、“詹妮弗” 安妮斯顿、布莱德·詹、安吉、詹、布兰吉丽娜·布拉德、詹 布拉德、安吉丽娜、珍妮弗·安妮斯顿、美国、安妮斯顿、纽约 张贴“,”InTouch“,[”詹妮弗·安妮斯顿“,”墨西哥“,[”詹妮弗 “安妮斯顿”、“朋友”、“马特·勒布朗”、“明星”、“保罗”、“詹妮弗”], [‘詹妮弗·安妮斯顿’、‘贾斯汀·塞鲁’、‘玛丽·克莱尔’,
《安妮斯顿》,《赫芬顿邮报》,《詹妮弗·安妮斯顿》,《贾斯汀》 Theroux、《明星杂志》、《詹妮弗·安妮斯顿》、《詹妮弗·安妮斯顿》,
“布拉德·皮特”、“布拉德·皮特·詹妮弗·安妮斯顿”、“安吉丽娜·朱莉”,
“珍妮弗”]]

更新:当前输出片段

这是当前的输出片段,我想提取
person
location
和其他
event
并将它们作为新列添加到原始数据帧中。以下是我得到的:

现在我想用
TFIDF
news\u-source
进一步提取姓名,例如
newyorkpost
starmagazine
或与新专栏类似的字体。我不知道该怎么做。有什么想法可以实现这一点吗

所需输出

基本上,我想通过person、location、source将连续NER的输出重塑为dataframe中的新列。以下是我的示例输出:

df=pd.DataFrame({'sentence':['longtextlongtextlongtextlongtextlongtext', 'longtextlongtextlongtextlongtextlongtext', 'longtextlongtextlongtextlongtextlongtext' ],'celebretity_name': ['Jennifer Aniston','Brad Pitt','Jennifer Aniston'], 'source':['NBC','Friends','New York Post']})
有人能告诉我怎么做吗?是否可以通过
名人姓名
新闻来源
将提取的NER拆分为数据帧中的新列?有什么想法吗?谢谢

TL;博士 这会很慢,但应该可以:

df['celebretity_name'] = df.sentences.apply(get_continuous_chunks)

谢谢你的回答。是否可以从提取的分块NER中提取
PER
GPE
ORG
EVE
,并将它们作为新列添加到数据帧中?你有什么想法吗?非常感谢你