gpt4 book ai didi

python - NER 朴素算法

转载 作者:太空狗 更新时间:2023-10-30 01:59:53 26 4
gpt4 key购买 nike

我从来没有真正处理过 NLP,但对 NER 有一个想法,它不应该起作用,但在某种情况下却做得非常好。我不明白它为什么起作用,为什么不起作用或天气可以延长。

我们的想法是通过以下方式提取故事中主要人物的名字:

  1. 为每个单词建立字典
  2. 为每个单词填写一个列表,其中包含在文本中出现在它旁边的单词
  3. 为每个单词找到一个与列表的最大相关性的单词(意味着这些单词在文本中的使用相似)
  4. 考虑到故事中一个角色的名字,像它一样使用的词,也应该是(假的,那是不应该的,但因为我直到今天早上才处理 NLP,所以我天真地开始了新的一天)

我在 Alice in Wonderland 上运行了过于简单的代码(附在下面) ,对于“爱丽丝”返回:

21 ['Mouse', 'Latitude', 'William', 'Rabbit', 'Dodo', 'Gryphon', 'Crab', 'Queen', 'Duchess', 'Footman', 'Panther', 'Caterpillar', 'Hearts', 'King', 'Bill', 'Pigeon', 'Cat', 'Hatter', 'Hare', 'Turtle', 'Dormouse']

虽然它过滤了大写单词(并接收“Alice”作为聚集的单词),但最初有大约 500 个大写单词,而且它仍然很接近 main characters。去。

它在其他角色和其他故事中效果不佳,但会产生有趣的结果。

知道这个想法是否可用、可扩展,或者为什么它在“爱丽丝”的这个故事中完全有效?

谢谢!

#English Name recognition
import re
import sys
import random
from string import upper

def mimic_dict(filename):
dict = {}
f = open(filename)
text = f.read()
f.close()
prev = ""
words = text.split()
for word in words:
m = re.search("\w+",word)
if m == None:
continue
word = m.group()
if not prev in dict:
dict[prev] = [word]
else :
dict[prev] = dict[prev] + [word]
prev = word
return dict

def main():
if len(sys.argv) != 2:
print 'usage: ./main.py file-to-read'
sys.exit(1)

dict = mimic_dict(sys.argv[1])
upper = []
for e in dict.keys():
if len(e) > 1 and e[0].isupper():
upper.append(e)
print len(upper),upper

exclude = ["ME","Yes","English","Which","When","WOULD","ONE","THAT","That","Here","and","And","it","It","me"]
exclude = [ x for x in exclude if dict.has_key(x)]
for s in exclude :
del dict[s]

scores = {}
for key1 in dict.keys():
max = 0
for key2 in dict.keys():
if key1 == key2 : continue
a = dict[key1]
k = dict[key2]
diff = []
for ia in a:
if ia in k and ia not in diff:
diff.append( ia)
if len(diff) > max:
max = len(diff)
scores[key1]=(key2,max)
dictscores = {}
names = []
for e in scores.keys():
if scores[e][0]=="Alice" and e[0].isupper():
names.append(e)
print len(names), names


if __name__ == '__main__':
main()

最佳答案

从您的程序外观和以前使用 NER 的经验来看,我会说这“有效”,因为您没有进行适当的评估。您在本应找到“三月兔”的地方找到了“野兔”。

NER(至少对于英语)的困难在于找不到名字;它正在检测它们的全部范围(“March Hare”示例);甚至在所有单词都大写的句子开头检测它们;将他们分类为个人/组织/地点/等。

另外,爱丽丝梦游仙境是一部 child 小说,是一个相当容易处理的文本。像“微软首席执行官史蒂夫·鲍尔默”这样的新闻专线短语提出了一个更难的问题;在这里,你想要检测

[ORG Microsoft] CEO [PER Steve Ballmer]

关于python - NER 朴素算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10585864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com