java - 如何扩展WhitespaceTokenizer?

标签 java lucene tokenize

我需要使用一个分词器来分割空格上的单词,但如果空格位于双括号内,则不会分割。这是一个例子:

My input-> term1 term2 term3 ((term4 term5)) term6  

应该产生这个 token 列表:

term1, term2, term3, ((term4 term5)), term6.  

我认为我可以通过扩展Lucene来获得这种行为WhiteSpaceTokenizer 。我如何执行此扩展?
还有其他解决方案吗?

提前致谢。

最佳答案

我没有尝试扩展 Tokenizer,但我这里有一个很好的(我认为)带有正则表达式的解决方案:

\w+|\(\([\w\s]*\)\)

以及一种从返回数组的 reg ex 中按匹配组分割字符串的方法。代码示例:

class Regex_ComandLine {

public static void main(String[] args) {
    String input = "term1 term2 term3 ((term4 term5)) term6";    //your input
    String[] parsedInput = splitByMatchedGroups(input, "\\w+|\\(\\([\\w\\s]*\\)\\)");

    for (String arg : parsedInput) {
        System.out.println(arg);
    }
}

static String[] splitByMatchedGroups(String string,
                                            String patternString) {
    List<String> matchList = new ArrayList<>();
    Matcher regexMatcher = Pattern.compile(patternString).matcher(string);

    while (regexMatcher.find()) {
        matchList.add(regexMatcher.group());
    }

    return matchList.toArray(new String[0]);
}

}

输出:

term1
term2
term3
((term4 term5))
term6

希望这对您有帮助。

请注意以下代码与通常的split():

String[] parsedInput = input.split("\\w+|\\(\\([\\w\\s]*\\)\\)");

不会返回任何内容或不会返回您想要的内容,因为它只检查分隔符。

关于java - 如何扩展WhitespaceTokenizer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7546444/

相关文章:

java - getText() 方法不打印所有下拉值

java - HQL 等价于 hibernate 中标准查询的多对多关系查询?

full-text-search - 使用 Lucene 通过 Symfony 为 PDF 文件建立索引

c - 使用 strtok() 在 c 中将字符串标记两次

java - Android:考虑2个分隔字符分割字符串

java - 我应该如何使用异步通信实现 GET 端点?

java - 在 REST 服务中上传大文件的策略

java - Lucene5.3.1中StandardFilter到底做了什么?

search - 获取总和子聚合

r - R 中的 "Bag of characters"n 元语法