- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我从来没有真正处理过 NLP,但对 NER 有一个想法,它不应该起作用,但在某种情况下却做得非常好。我不明白它为什么起作用,为什么不起作用或天气可以延长。
我们的想法是通过以下方式提取故事中主要人物的名字:
我在 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/
我是一名优秀的程序员,十分优秀!