我是NLP的新手,我遇到过OpenNLP。根据我的理解,tokenization
意味着将文本分成单词和句子。单词通常用空格隔开,但并非所有空格都相等。例如,洛杉矶的个人想法与空白无关。但是,每当我运行OpenNLP令牌生成器时,它都会为洛杉矶创建两个不同的令牌:丢失和天使。这是我的代码(我从旧的OpenNLP网站获得了模型en-token.bin。)
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
我在线测试了其他一些令牌生成器,它们产生相同的输出。如果不是标记化,那么识别这两个单词属于一起的过程将如何?
答案 0 :(得分:0)
在线展示的基本单词分词器通常通过查看空格将句子分成单词。为了解决物理意义上的单词(例如洛杉矶或新德里等)不应该拆分的情况,我们可以自己编写一个函数,在拆分单词后,查找某种包含以下单词的字典:具有物理意义,并尝试将这些单词组合成一个组。
答案 1 :(得分:0)
opennlp提供了“ TokenizerTrainer”工具来训练数据。 OpenNLP格式每行包含一个句子。您还可以指定用空格或特殊标记分隔的标记。
您可以关注this博客,以出于各种目的在opennlp中抢先一步。文章将向您展示如何创建训练文件和建立新模型。
您可以使用modelbuilder addon轻松创建自己的训练数据集,并按照此处提到的一些规则进行训练以创建良好的NER model。
您可以使用Modelbuilder插件here找到一些帮助。
基本上,您将所有信息都放在一个文本文件中,而NER实体则放在另一个文件中。插件会搜索特定的实体并将其替换为所需的标签。因此产生标记的数据。使用这个工具一定很容易!
此外,请遵循mr. markg's的答案以了解如何自行创建新模型。这将帮助您构建自己的模型,这些模型可以针对您的应用程序进行定制。
希望这会有所帮助!
答案 2 :(得分:-1)