使用NLTK,如何分辨公共汽车,公共和卡拉克之间的区别?

时间:2018-09-16 16:35:52

标签: nltk

我有一段

  

在卡拉克省所有内部线路上运行的公共巴士都有   昨天举行罢工,抗议罢免决定   超过12年的工作巴士。公交车司机和车主说   新政府决定拆除已经结束的公交车   12岁以下,将给这些车主带来巨大的经济损失   公共汽车,其中大多数因购买而遭受高额债务。   “政府不知道自己在做什么,尤其是在   取消数千辆以各种方式运营的公交车的案例   王国的部分地区,这些国家通过银行和   他指出,“公交车将保持闲置状态   直到政府复审该决定对成千上万的人不公平   王国的家庭。”就他而言,   卡拉克运输管理当局(Mahmoud Al-Sarayra)没有   回答Al Ghad的呼吁,以回应驾驶员的抱怨   和公交车主

在该段上运行以下代码:

import nltk
sentences = [x.replace('.','').replace('"','') for x in nltk.sent_tokenize(paragraph)]
tokenized_sentences = [nltk.word_tokenize(sentence) for sentence in sentences]
tagged_sentences = [nltk.pos_tag(sentence) for sentence in tokenized_sentences]
chunked_sentences = [x for x in nltk.ne_chunk_sents(tagged_sentences)]
entities=np.unique(np.array([x for s in chunked_sentences for x in s if type(x)==nltk.tree.Tree ])).tolist()

NLTK函数ne_chunk_sents给我以下命名实体:

[Tree('GPE', [('Bus', 'NNP')]),
 Tree('GPE', [('Karak', 'NNP')]),
 Tree('GPE', [('Public', 'NNP')]),
 Tree('ORGANIZATION', [('Karak', 'NNP'), ('Transport', 'NNP'), ('Regulatory', 'NNP'), ('Authority', 'NNP')]),
 Tree('ORGANIZATION', [('Kingdom', 'NNP')]),
 Tree('PERSON', [('Al', 'NNP'), ('Ghad', 'NNP')]),
 Tree('PERSON', [('Mahmoud', 'NNP'), ('Al-Sarayra', 'NNP')])]

GPE代表“地缘政治实体”。我不确定“公共”和“公共汽车”是否合格。我知道Karak是我要找的东西。 NLTK中最简单的方法是将常见的英语单词(例如Public和Bus)与非英语且最有可能是地名的作品区分开来?

注意:这类似于两年前的this question,但没有得到明确的答案。

1 个答案:

答案 0 :(得分:0)

因此,遵循the similar question from 2 years ago的思路,这是一个解决方案:

e2=[(x.label(),' '.join([y for y,z in x[0:]])) for x in entities]
e3=[y for x,y in e2 if x == 'GPE']
english_vocab = set(w.lower() for w in nltk.corpus.words.words())
e4=[x for x in e3 if x.lower() not in english_vocab]

然后 e4 是列表

['Karak']