Python 将NER(命名实体识别)作为dataframe中的新列进行操作的任何解决方法?
我有celebirty新闻数据集,我可以从中提取名称实体识别。最初,我想出了如何使用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(
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
,并将它们作为新列添加到数据帧中?你有什么想法吗?非常感谢你