对于Java,有一个tokenizator,它与我想要的完全匹配?

对于Java,有一个tokenizator,它与我想要的完全匹配?,java,text,nlp,tokenize,Java,Text,Nlp,Tokenize,我想标记一个文本,但不只是用空格分隔 有些事情,比如专有名称,我只想设置一个标记,例如:Renato Dinhani Conciço。另一种情况:百分比60%,不分为两个代币 我想知道的是,是否有来自某个图书馆的标记化器可以提供高度定制?如果没有,我会尝试写我自己的,如果有一些接口或实践遵循 并非所有事情都需要得到普遍承认。我不需要重新整理中文字母表 我的申请是大学申请,主要是葡萄牙语。只有一些东西,如名称、地点和类似的东西将来自其他语言。StringTokenizer是一个遗留类,仅为向后兼容

我想标记一个文本,但不只是用空格分隔

有些事情,比如专有名称,我只想设置一个标记,例如:Renato Dinhani Conciço。另一种情况:百分比60%,不分为两个代币

我想知道的是,是否有来自某个图书馆的标记化器可以提供高度定制?如果没有,我会尝试写我自己的,如果有一些接口或实践遵循

并非所有事情都需要得到普遍承认。我不需要重新整理中文字母表


我的申请是大学申请,主要是葡萄牙语。只有一些东西,如名称、地点和类似的东西将来自其他语言。

StringTokenizer是一个遗留类,仅为向后兼容而维护。新代码不鼓励使用它


您应该使用String.split函数。split函数将正则表达式作为其参数。此外,您还可以使用Pattern和Matcher类来增强它。您可以编译模式对象,然后使用它来匹配各种场景。

StringTokenizer是一个遗留类,仅为向后兼容而维护。新代码不鼓励使用它


您应该使用String.split函数。split函数将正则表达式作为其参数。此外,您还可以使用Pattern和Matcher类来增强它。您可以编译您的模式对象,然后使用它来匹配各种场景。

我认为标记器对于您想要的东西来说太简单了。标记器的一个进步是像JFlex这样的lexer。这些将把字符流分割成单独的标记,就像标记器一样,但具有更灵活的规则


即便如此,似乎你还需要某种自然语言处理,因为教一个词汇量计算者专有名称和普通单词之间的区别可能很棘手。你可以通过教它一系列以大写字母开头的单词都属于一个整体,数字后面可能是单位,等等,来取得相当大的进步。祝你好运。

我认为标记器对于你想要的东西来说太简单了。标记器的一个进步是像JFlex这样的lexer。这些将把字符流分割成单独的标记,就像标记器一样,但具有更灵活的规则


即便如此,似乎你还需要某种自然语言处理,因为教一个词汇量计算者专有名称和普通单词之间的区别可能很棘手。你也许可以通过教它一个以大写字母开头的字符串都属于一个整体,数字后面可能是单位,等等来取得相当大的进步。祝你好运。

我会尝试从规则的角度而不是从标记化的角度来谈这个问题。这将是最大的挑战——创建一个能够满足大多数情况的综合规则集

用人类的术语定义什么是不应该基于空格分割的单元。名称示例就是其中之一。 对于空白分割的每一个例外,创建一组如何识别它的规则。对于名称示例:2个或更多连续的大写单词,中间有或没有特定于语言的非大写名称单词,如de。 将每个规则实现为自己的类,可以在循环时调用这些类。 基于空格分割整个字符串,然后循环它,跟踪之前出现的令牌以及当前的令牌,为每个令牌应用规则类。 规则isName的示例:

循环1:例如:isName=false 循环2:Renato isName=true 循环3:Dinhani isName=true 循环4:康塞昂。isName=true 循环5:另一个isName=false
留给你的是:例如,雷纳托·迪哈尼·康塞昂,另一个

我会尝试从规则的角度而不是从标记化的角度来讨论它。这将是最大的挑战——创建一个能够满足大多数情况的综合规则集

用人类的术语定义什么是不应该基于空格分割的单元。名称示例就是其中之一。 对于空白分割的每一个例外,创建一组如何识别它的规则。对于名称示例:2个或更多连续的大写单词,中间有或没有特定于语言的非大写名称单词,如de。 将每个规则实现为自己的类,可以在循环时调用这些类。 基于空格分割整个字符串,然后循环它,跟踪之前出现的令牌以及当前的令牌,为每个令牌应用规则类。 规则isName的示例:

循环1:例如:isName=false 循环2:Renato isName=true 循环3:Dinhani isName=true 循环4:康塞昂。isName=true 循环5:另一个isName=false 给你留下:例如:雷纳托·迪哈尼·康塞昂,另一个你应该试试的。它包括随时可用的u se葡萄牙语句子检测器和标记器模型

下载ApacheOpenNLP并解压缩它。将葡萄牙语模型复制到OpenNLP文件夹。从下载模型

从命令行使用它:

使用API:

你应该试试。它包括葡萄牙语的现成句子检测器和标记器模型

下载ApacheOpenNLP并解压缩它。将葡萄牙语模型复制到OpenNLP文件夹。从下载模型

从命令行使用它:

使用API:



人名是不规则的,因此无法使用此方法将全名识别为标记。名字是在原始问题中确定的一个特定用例。我怀疑这个问题的海报是在要求一种通用的方法来分割他的所有字符串。在这种情况下,他的要求听起来更像是一种最佳实践。这可能是。我把这个问题解释为寻找一些超级强大的字符串处理框架。我想这取决于你如何理解这个问题。我发布的两个例子是我在第一次测试中看到的第一件事,但新的情况可能会发生。人名不规则,因此使用此方法无法将全名识别为标记。名字是在原始问题中确定的一个特定用例。我怀疑这个问题的海报是在要求一种通用的方法来分割他的所有字符串。在这种情况下,他的要求听起来更像是一种最佳实践。这可能是。我把这个问题解释为寻找一些超级强大的字符串处理框架。我想这取决于你是如何理解这个问题的。我发布的两个例子是我在第一次测试中看到的第一件事,但新的情况可能会发生。如果你能以一种简单的编程方式解决这个问题,我很肯定你会得到ACM图灵奖。的确,这似乎是在试图用一种静态算法做一些事情,它确实需要某种知识库和人工智能。事实上,你已经看到这不会发生,因为没有解决开放问题的算法。专有名称检测,也称为命名实体识别,是一个活跃的研究领域。这不是标记化,这是全面的NLP。要了解有关NLP/信息提取的更多信息,请参阅本文,并尝试NLP中的现有方法,我建议使用nltk工具包并阅读相应的书籍。在nltk页面-。如果你能以一种简单的编程方式解决这个问题,我敢肯定你会得到ACM图灵奖。事实上,这似乎是在试图用一种静态算法做一些事情,它确实需要某种知识库和人工智能。事实上,你已经看到这不会发生,因为没有解决开放问题的算法。专有名称检测,也称为命名实体识别,是一个活跃的研究领域。这不是标记化,这是全面的NLP。要了解有关NLP/信息提取的更多信息,请参阅本文,并尝试NLP中的现有方法,我建议使用nltk工具包并阅读相应的书籍。在nltk页面-。我喜欢这个想法。关于它有两个问题:在任何一个图书馆里都有一些东西在实施吗?最好使用正则表达式进行验证,还是逐字符运行字符串?正在搜索,尚未找到。还请注意,即使存在lib,您可能仍然需要实现自己的规则。他可以首先使用命名实体识别器,然后将每个已识别的实体视为一个标记,将所有非实体的实体视为单独的标记。这就脱离了规则,自动化了专有名词的识别,剩下的就是一个正则表达式。以下是NER上的堆栈溢出页:。OpenCalais是选中的选项。美好的我喜欢这个主意。关于它有两个问题:在任何一个图书馆里都有一些东西在实施吗?最好使用正则表达式进行验证,还是逐字符运行字符串?正在搜索,尚未找到。还请注意,即使存在lib,您可能仍然需要实现自己的规则。他可以首先使用命名实体识别器,然后将每个已识别的实体视为一个标记,将所有非实体的实体视为单独的标记。这就脱离了规则,自动化了专有名词的识别,剩下的就是一个正则表达式。以下是NER上的堆栈溢出页:。OpenCalais是选中的选项。美好的
bin/opennlp TokenizerME pt-ten.bin 
Loading Tokenizer model ... done (0,156s)
O José da Silva chegou, está na sua sala.
O José da Silva chegou , está na sua sala .
// load the model
InputStream modelIn = new FileInputStream("pt-token.bin");

try {
  TokenizerModel model = new TokenizerModel(modelIn);
}
catch (IOException e) {
  e.printStackTrace();
}
finally {
  if (modelIn != null) {
    try {
      modelIn.close();
    }
    catch (IOException e) {
    }
  }
}

// load the tokenizer
Tokenizer tokenizer = new TokenizerME(model);

// tokenize your sentence
String tokens[] = tokenizer.tokenize("O José da Silva chegou, está na sua sala.");