- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的项目的目标是回答查询,例如:“我正在寻找在谷歌工作的 20 到 30 岁的美国女性”然后我必须处理查询并查看数据库以找到答案。
为此,我需要将 Stanford 3-class NERTagger 和我自己的标注器结合起来。事实上,我的 NER 标注器可以标注年龄、国籍和性别。但我需要 Stanford 标注器来标注组织,因为我没有这方面的任何培训文件。
现在,我有这样的代码:
def __init__(self, q):
self.userQuery = q
def get_tagged_tokens(self):
st = NERTagger('C:\stanford-ner-2015-01-30\my-ner-model.ser.gz','C:\stanford-ner-2015-01-30\stanford-ner.jar')
result = st.tag(self.userQuery.split())[0]
return result
我想要这样的东西:
def get_tagged_tokens(self):
st = NERTagger('C:\stanford-ner-2015-01-30\my-ner-model.ser.gz','C:\stanford-ner-2015-01-30\stanford-ner.jar')
st_def = NERTagger('C:\stanford-ner-2015-01-30\classifiers\english.all.3class.distsim.crf.ser.gz','C:\stanford-ner-2015-01-30\stanford-ner.jar')
tagger = BackoffTagger([st, st_def])
result = st.tag(self.userQuery.split())[0]
return result
这意味着标注器首先使用我的标注器,然后使用斯坦福标注器来标注未标注的词。
是否可以将我的模型与斯坦福模型结合起来只是为了标记组织?如果是,执行此操作的最佳方法是什么?
谢谢!
最佳答案
带有 Stanford CoreNLP 3.5.2 的新 NERClassifierCombiner 或新 Stanford NER 3.5.2 添加了命令行功能,可以使用 NLTK 轻松获得这种效果。
当您提供序列化分类器列表时,NERClassifierCombiner 将按顺序运行它们。在一个标记器标记句子后,没有其他标记器将标记已经标记的标记。所以请注意,在我的演示代码中,我提供了 2 个分类器作为示例。它们按照您放置它们的顺序运行。如果我没记错的话,我相信你最多可以放 10 个!
首先,确保您拥有 Stanford CoreNLP 3.5.2 或 Stanford NER 3.5.2 的最新副本,以便您拥有具有此新功能的正确 .jar 文件。
其次,确保您的自定义 NER 模型是使用 Stanford CoreNLP 或 Stanford NER 构建的,否则将无法正常工作!如果您使用旧版本应该没问题。
第三,我提供了一些应该可以工作的示例代码,主要目的是继承 NERTagger:
如果人们愿意,我可以考虑将其推送到 NLTK,这样默认情况下它就在那里!
这是一些示例代码(它有点老套,因为我只是匆匆忙忙地把它推出门外,例如在 NERComboTagger 的构造函数中,第一个参数是 classifier_path1 是没有意义的,但如果我不这样做,代码会崩溃放一个有效的文件):
#!/usr/bin/python
from nltk.tag.stanford import NERTagger
class NERComboTagger(NERTagger):
def __init__(self, *args, **kwargs):
self.stanford_ner_models = kwargs['stanford_ner_models']
kwargs.pop("stanford_ner_models")
super(NERComboTagger,self).__init__(*args, **kwargs)
@property
def _cmd(self):
return ['edu.stanford.nlp.ie.NERClassifierCombiner',
'-ner.model',
self.stanford_ner_models,
'-textFile',
self._input_file_path,
'-outputFormat',
self._FORMAT,
'-tokenizerFactory',
'edu.stanford.nlp.process.WhitespaceTokenizer',
'-tokenizerOptions',
'\"tokenizeNLs=false\"']
classifier_path1 = "classifiers/english.conll.4class.distsim.crf.ser.gz"
classifier_path2 = "classifiers/english.muc.7class.distsim.crf.ser.gz"
ner_jar_path = "stanford-ner.jar"
st = NERComboTagger(classifier_path1,ner_jar_path,stanford_ner_models=classifier_path1+","+classifier_path2)
print st.tag("Barack Obama is from Hawaii .".split(" "))
注意子类中的主要变化是 _cmd 返回的内容。
另请注意,我在解压缩的文件夹 stanford-ner-2015-04-20 中运行它,因此路径是相对于它的。
我得到这个输出:
[('Barack','PERSON'), ('Obama', 'PERSON'), ('is','O'), ('from', 'O'), ('Hawaii', 'LOCATION'), ('.', 'O')]
这是 Stanford NER 页面的链接:
http://nlp.stanford.edu/software/CRF-NER.shtml
如果您需要更多帮助或者我的代码中有任何错误,请告诉我,我可能在转录时犯了一个错误,但它在我的笔记本电脑上工作!
关于python - NLTK : combining stanford tagger and personal tagger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30162809/
我刚开始使用Stanford Parser,但我不太了解这些标签。这可能是一个愚蠢的问题,但是谁能告诉我SBARQ和SQ标签代表什么,在哪里可以找到它们的完整列表?我知道Penn Treebank的样
我正在使用 python 的内置库 nltk 来获取 stanford ner tagger api 设置,但我发现此 api 的单词标记与 stanford 的 ner tagger 网站上的在线演
我正在尝试使用斯坦福依赖解析器。我尝试从 Windows 上的命令行运行解析器以使用以下命令提取依赖项: java -mx100m -cp "stanford-parser.jar" edu.stan
我正在尝试开始使用 Stanford CoreNLP,甚至无法通过这里的第一个简单示例。 https://stanfordnlp.github.io/CoreNLP/api.html 这是我的代码:
我正在使用 stanford 核心 NLP,并使用这一行来加载一些模块来处理我的文本: props.put("annotators", "tokenize, ssplit, pos, lemma, n
我找到了与 Stanford Core NLP 兼容的德语解析和 pos-tag 模型。但是我无法使德语词形还原工作。有办法吗? 最佳答案 抱歉,据我所知,Stanford CoreNLP 不存在德语
我目前正在使用以下命令解析阿拉伯文本: java -mx1500m edu.stanford.nlp.parser.lexparser.LexicalizedParser \ -cp "$scri
我有以下结果,如您所见,爱德华这个名字有不同的结果(null 和 male)。这发生在几个名字上。 edward, Gender: null james, Gender: MALE karla, Ge
我发现了 stanford-NLP 的工具,发现它真的很有趣。 我是一名法国数据挖掘者/数据科学家,喜欢文本分析,并且很想使用您的工具,但是 NER 在法语中不可用,这让我感到非常困惑。 我很想制作我
我正在使用 Suse Linux 13.1 并自学斯坦福大学的 CS 106b 类(class)。我在这里找到了压缩库 http://www.stanford.edu/class/cs106b/hom
我正在使用 stanford CoreNLP 来尝试查找名词短语的语法关系。 这是一个例子: 给定“The fitness room was dirty”这句话。 我成功地将“The fitness
我正在使用 Stanford CoreNLP 并将其用于 NER。但是当我提取组织名称时,我看到每个词都标有注释。因此,如果实体是“纽约时报”,那么它将被记录为三个不同的实体:“NEW”、“YORK”
我开始使用 coreNLP 库 3.3.1 来分析意大利文本文档。有没有人尝试过使用英语以外的语言?您是否找到了训练算法所需的模型? 谢谢 卡罗 最佳答案 目前,除了英语,我们只为中文打包模型(见 h
斯坦福解析器和斯坦福 CoreNlp 的词性 (POS) 模型用途不同,这就是为什么通过 Stanford Parser 和 CoreNlp 执行的 POS 标记的输出存在差异。 在线核心 NLP 输
我的 (maven) 项目依赖于 stanford-CoreNLP 和 stanford-Parser,显然每个依赖项的(词汇化)解析器产生不同的输出,它们并不相同。 我的问题是如何确定应该从哪个包加
我正在尝试学习 Stanford CoreNLP 库。我在发布的示例 ( https://sergeytihon.wordpress.com/2013/10/26/stanford-corenlp-i
我是 nltk 的新手,似乎正在遵循过时的教程来开始使用 nltk 中的 StanleyDependencyParser。 我已经从https://stanfordnlp.github.io/安装了S
我正在尝试使用Stanford CoreNLP训练NER模型,但是找不到主类。我已经在我的CLASSPATH中包含了jar文件的路径,但仍然找不到它们。有什么办法解决这个问题吗? C:\ Users
我不明白它要我做什么。分配给 sentence正在工作: val sentences : java.util.List[CoreMap] = document.get(classOf[Sentence
我正在参加 Rotten Tomatoes NLP 预测的 kaggle 竞赛。 训练集格式解析如下: PhraseId SentenceId Phrase Sentiment 1 1 A serie
我是一名优秀的程序员,十分优秀!