0

我的应用程序需要能够检测字符串中的单词数。我为此使用了 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 上的不同行为

4

1 回答 1

0

根据 ICU4J 网站,我的测试用例都是带有多个字符的单个单词,因此 Linux 可以正常工作。他们没有评论为什么相同的代码在 Windows 上表现不同。我只需要它在 Linux 上运行。如果我认识更多说中文的人,我早就知道了。

于 2018-08-02T17:15:06.373 回答