首先,我将文件内容标记为句子,然后对每个句子调用斯坦福 NER。但这个过程确实很慢。我知道如果我在整个文件内容上调用它会更快,但是我在每个句子上调用它,因为我想在 NE 识别之前和之后索引每个句子。
st = NERTagger('stanford-ner/classifiers/english.all.3class.distsim.crf.ser.gz', 'stanford-ner/stanford-ner.jar')
for filename in filelist:
sentences = sent_tokenize(filecontent) #break file content into sentences
for j,sent in enumerate(sentences):
words = word_tokenize(sent) #tokenize sentences into words
ne_tags = st.tag(words) #get tagged NEs from Stanford NER
这可能是由于调用st.tag()
对于每个句子,但是有什么办法让它运行得更快吗?
EDIT
我想单独标记句子的原因是我想将句子写入文件(如句子索引),以便在稍后阶段给出新标记的句子,我可以获得未处理的句子(我也在此处进行词形还原) )
文件格式:
(已发送号码、原始句子、NE_and_lemmatized_sentence)
你可以使用 stanford ner 服务器。
速度会快很多。
安装sner
pip install sner
运行服务器
cd your_stanford_ner_dir
java -Djava.ext.dirs=./lib -cp stanford-ner.jar edu.stanford.nlp.ie.NERServer -port 9199 -loadClassifier ./classifiers/english.all.3class.distsim.crf.ser.gz
from sner import Ner
test_string = "Alice went to the Museum of Natural History."
tagger = Ner(host='localhost',port=9199)
print(tagger.get_entities(test_string))
这段代码的结果是
[('Alice', 'PERSON'),
('went', 'O'),
('to', 'O'),
('the', 'O'),
('Museum', 'ORGANIZATION'),
('of', 'ORGANIZATION'),
('Natural', 'ORGANIZATION'),
('History', 'ORGANIZATION'),
('.', 'O')]
更多细节查看https://github.com/caihaoyu/sner
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)