当前位置: 首页 > 知识库问答 >
问题:

OpenNLP标记器不检测属于一起的单词?

厍书
2023-03-14

我是NLP新手,我遇到了OpenNLP。根据我的理解,标记化意味着将文本分割成单词和句子。单词通常用空格隔开,但并非所有空格都相等。例如,洛杉矶在一个人的思想中不考虑空白。但每当我运行OpenNLP标记器时,它都会为洛杉矶创建两个不同的标记:Los

InputStream inputStream = new FileInputStream("C:\\apache-opennlp-1.9.0\\Models\\en-token.bin"); 
TokenizerModel tokenModel = new TokenizerModel(inputStream);
//Instantiating the TokenizerME class 
TokenizerME tokenizer = new TokenizerME(tokenModel);

String tokens[] = tokenizer.tokenize(sentence2);

for(String token : tokens) {
     System.out.println(token);
}

以下是输出:

The
city
of
Los
Angeles
is
one
of
the
most
beautiful
places
in
California

我在线测试了其他一些标记化器,它们产生相同的输出。如果不是标记化,识别这两个词属于一起的过程是什么?

共有3个答案

和选
2023-03-14

正如你所注意到的,英语标记化者基本上总是将空格视为分隔词。您可以使用一个智能标记器来检查是否应该拆分splace,但通常在NLP管道中(对于使用空格的语言),标记器尽可能简单。在标记化之后,将已分离的单词连接在一起将是一个单独的步骤。

找到应该连接的单词,如“洛杉矶”,通常被称为短语检测或搭配检测。短语本身在学术写作中通常被称为多词表达。OpenNLP似乎没有任何与MWE相关的功能,但Gensim有一个易于使用的短语功能,它们链接到它们实现所基于的论文。斯坦福大学的CoreNLP也有一个用于该任务的库。

丰超
2023-03-14

opennlp提供了“TokenizerTrainer”工具来训练数据。OpenNLP格式每行包含一句话。还可以指定由空格或特殊标记分隔的标记。

在opennlp中,您可以出于各种目的关注这个博客,以获得领先。这篇文章将向你展示如何创建培训文件和构建新模型。

您可以使用modelbuilder插件轻松创建自己的训练数据集,并遵循此处提到的一些规则来训练并创建一个好的NER模型。

你可以在这里找到一些使用modelbuilder插件的帮助。

基本上,你把所有的信息放在一个文本文件中,把实体放在另一个文本文件中。该插件搜索特定的实体,并将其替换为所需的标记。因此产生标记数据。使用这个工具一定很容易!

此外,按照markg先生的答案来理解如何自己创建新模型。这将帮助你建立自己的模型,可以为你的应用定制。

希望这有帮助!

闻人宇定
2023-03-14

在线呈现的基本单词标记器通常通过看到空格将句子拆分为单词。为了解决具有物理意义的单词(如洛杉矶或新德里等)不应被拆分的情况,我们可以自己编写一个函数,在拆分单词后,查找包含具有物理意义的单词的某种词典,并尝试将这些单词组合成一组。

 类似资料:
  • 有关于OpenNLP中解析器标记含义的文档吗?我知道POS标记类型遵循树库约定,但不幸的是,我没有找到任何关于解析器标记的信息,例如“SBAR”等。 这个留档是存在于某个地方还是我必须自己弄清楚?

  • 我正在使用OpenNLP java将字符串转换为标记。但是,我发现圆括号无法正确识别。 我正在使用的代码:' 例如,字符串是“像我这样的人正在关闭新闻”。结果是: 未识别“are”的左侧圆括号。此外,例如,“401(k)”转换为“401(k”和“)”。 我还尝试了“SimpleTokenizer”课程。它可以把括号分开,但也可以把“头版”和“头版”分开,这不是我想要的。 我想知道是否有解决办法?

  • 我正在尝试使用Apache OpenNLP API创建一个标记器。我已经从他们的网站中提取了代码,但在Tokenize类中,以下代码行出现了“不兼容类型”错误: Tokenize Tokenizer=new TokenizerME(模型); 有人知道这个错误的原因吗?因为看起来他们不应该不兼容? 这是主要类: 这是具有错误的Tokenize类:

  • 我在R中得到的POS标记文本形式如下: 身份证 ..... 我想检索它已标记的单词,例如,而不是带有所有值的列“type”,因为单词检索实际单词。我可以使用scan_tokenizer,但当有“不是”之类的形式时,问题就出现了,POS标记器将其分为“is”和“not”,这很好,但scan_tokenizer不会这样标记,它只是将其保持在“is't”。有人能帮我检索R已标记并用于POS标记的单词吗?

  • 我正在尝试训练opennlp词性标记器,它会根据我的特定词汇在句子中标记单词。例如: 正常词性标注后: 句子:NodeManager/NNP失败/VBD to/TO start/VB the/DT server/NN 使用我的词性标注模型后: 句子:NodeManager/AGENT失败/其他到/其他启动/其他/其他服务器/对象 其中AGENT,OTHER,OBJECT是我定义的标签。 所以基本上

  • 编辑1:主要的问题是在训练完一个NER模型后,我将它应用到令牌上。因此,它不会识别“轮滑”,因为在代币中,它们以“轮滑”和“滑冰”的形式出现,而NER模型现在无法识别这个爱好。