如何在Python中修复这个n-gram提取器?

如何在Python中修复这个n-gram提取器?,python,nlp,nltk,n-gram,Python,Nlp,Nltk,N Gram,我制作了一个n-gram提取器,可以从文本中提取组织的名称。但是,程序只提取第一个单词和最后一个单词的第一个字母。例如,如果文本中出现短语“Sprint International Corporation”,程序将返回“s Corporation”作为n-gram。你知道我做错了什么吗?我已经在下面发布了代码和输出。谢谢 这是n-gram提取器的代码 def组织结构图(分类文本): 组织=[c代表分类文本中的c,如果(c[1]==“组织”)] #打印(orgs) 组合组织=[] prev_org

我制作了一个n-gram提取器,可以从文本中提取组织的名称。但是,程序只提取第一个单词和最后一个单词的第一个字母。例如,如果文本中出现短语
“Sprint International Corporation”
,程序将返回
“s Corporation”
作为n-gram。你知道我做错了什么吗?我已经在下面发布了代码和输出。谢谢

这是n-gram提取器的代码

def组织结构图(分类文本):
组织=[c代表分类文本中的c,如果(c[1]==“组织”)]
#打印(orgs)
组合组织=[]
prev_org=False
新组织=(“”,“组织”)
对于范围内的i(len(分类文本)):
如果分类,文本[i][1]!=“组织”:
prev_org=False
其他:
如果上一个组织:
新建组织=新建组织[0]+“”+分类文本[i][0]。下()
其他:
合并组织追加(新组织)
新建组织=分类文本[i][0]。下()
prev_org=True
合并组织追加(新组织)
组合组织=组合组织[1:]
返回合并组织
这是我分析的文本和我用来分析它的程序

从nltk.tag导入StanfordNERTagger
从nltk.tokenize导入单词\u tokenize
st=StanfordNERTagger('C:\\path\\english.all.3class.distsim.crf.ser.gz',
'C:\\Users\\path\\stanford ner.jar',
编码(='utf-8')
text=“特朗普就贸易战问题会见了斯普林特国际公司、耐克公司和沃尔玛公司的代表。”
标记化\文本=单词\标记化(文本)
分类文本=st.tag(标记化文本)
组织=组织结构图(分类文本)
打印(orgs)
这是电流输出

['s corporation', 'n inc', 'w company']
这就是我想要输出的样子

['sprint international corporation', 'nike inc', 'wal-mart company']

首先,避免使用
StanfordNERTagger
,它很快就会被弃用。用这个代替

一旦您从中获得了带有标记和NER标记的元组列表,您想要完成的任务是在给定特定标记类型的元组列表中获得连续的标记项,您可以从中尝试解决方案

然后:

[out]:

[('Rami Eid', 'PERSON'), ('Stony Brook University', 'ORGANIZATION'), ('NY', 'LOCATION')]

首先,避免使用
StanfordNERTagger
,它很快就会被弃用。用这个代替

一旦您从中获得了带有标记和NER标记的元组列表,您想要完成的任务是在给定特定标记类型的元组列表中获得连续的标记项,您可以从中尝试解决方案

然后:

[out]:

[('Rami Eid', 'PERSON'), ('Stony Brook University', 'ORGANIZATION'), ('NY', 'LOCATION')]
ne_tagged_sent = [('Rami', 'PERSON'), ('Eid', 'PERSON'), ('is', 'O'), 
('studying', 'O'), ('at', 'O'), ('Stony', 'ORGANIZATION'), 
('Brook', 'ORGANIZATION'), ('University', 'ORGANIZATION'), 
('in', 'O'), ('NY', 'LOCATION')]

print(extract_ner(ne_tagged_sent))
[('Rami Eid', 'PERSON'), ('Stony Brook University', 'ORGANIZATION'), ('NY', 'LOCATION')]