ICU4J断开器在Linux上返回中文的错误单词边界



我的应用程序需要能够检测字符串中的单词数。我正在为此使用ICU4J库,特别是Breakiterator。该代码需要用于英语,中文,日语和德语。我发现中文似乎在Windows上正常工作,但在Linux上不起作用。在Linux上,它找不到单词中断。我是ICU4J的新手,所以可能是我的代码?

    public static int getWordBoundaryCount(String term, Locale locale) {
    if (term == null) {
        throw new IllegalArgumentException("term is null");
    }
    int wordBoundaryCount = 0;
    BreakIterator wb = BreakIterator.getWordInstance(locale);
    synchronized(wb) {
        wb.setText(term);
        int start = wb.first();
        for (int end = wb.next(); end != BreakIterator.DONE; start = end, end = wb.next()) {
            String tt = term.substring(start,end);
            System.out.println(tt);
            wordBoundaryCount++;
        }
    }
    return wordBoundaryCount;
}

给定字符串,"丙酮"和由zh_cn创建的位置。在Windows上以上代码返回2,但是在Linux上它返回1.的确,无论字符串中有多少个汉字返回1. Windows和Linux的英语都很好,但是它没有检测到中文单词边界在Linux上。我将其作为ICU项目中的JIRA发布:据他们说,Linux是正确的,我的测试用例都是具有多个字符的单个中文单词。他们没有解决Windows和Linux上的不同行为

根据ICU4J站点,我的测试用例都是单个单词,具有多个字符,因此Linux正常工作。他们没有评论为什么相同的代码在Windows上的行为不同。我只需要对Linux行为。如果我认识更多的中文演讲者,我很久以前就会弄清楚这一点。

最新更新