jai*_*rik 7 java string unicode multilingual word-count
我想从字符串中获取字数.就这么简单.问题是字符串可能是一种不可预测的语言.
所以,我需要一个int getWordCount(String)带有以下样本输出的签名函数-
getWordCount("???????") => 7
getWordCount("This is a sentence") => 4
Run Code Online (Sandbox Code Playgroud)
任何有关如何进行的帮助将不胜感激:)
标准API 为此类边界分析提供了BreakIterator,但Oracle Java 7区域设置支持不会破坏示例字符串.
当我使用ICU4J v51.1 BreakIterator时,它将样本分解成了[??, ??, ?, ?, ?].
// import com.ibm.icu.text.BreakIterator;
String sentence = "\u4f9b\u5e94\u5546\u4ee3\u53d1\u53d1\u8d27";
BreakIterator iterator = BreakIterator.getWordInstance(Locale.CHINESE);
iterator.setText(sentence);
List<String> words = new ArrayList<>();
int start = iterator.first();
int end = iterator.next();
while (end != BreakIterator.DONE) {
words.add(sentence.substring(start, end));
start = end;
end = iterator.next();
}
System.out.println(words);
Run Code Online (Sandbox Code Playgroud)
注意:我使用谷歌翻译猜测"供应商代发发货"是中国人.显然,我不会说这种语言所以不能评论输出的正确性.
"单词"的概念可能是微不足道的或复杂的.这是Apache Stanbol工具包:
字标记:Stanbol Enhancer需要检测单个字来处理文本.虽然这对于大多数语言来说是微不足道的,但对于某些东方语言来说这是一项相当复杂的任务,例如中文,日文,韩文.如果没有另外配置,Stanbol将使用空格来标记单词.
因此,如果单词的概念是语言的,而不是语法的,那么你应该使用NLP工具包
我首选的Java解决方案是Apache的Open NLP
注意:我使用http://www.mdbg.net/chindict/chindict.php?page=worddict 来标记您的示例.它意味着有4个单词而不是7个单词.我剪切和粘贴(相当碎片):
原文字简体Pīnyīn英文定义在字典中添加新的单词Traditional HSK供应商供应商gōngyìngshāng
供应商
供应商代
代dài
替代/代替他人/代替/代/王朝/年龄/时期/(历史)时代/(地质)时代
发
发fā
发送/显示(一个人的感觉)/发布/开发/分类器枪声(回合)
发HSK 4
发fà
发/台湾公关 [FA3]
发发货
发货fāhuò
派遣/发出货物
发货
前三个字符似乎形成一个单词.
| 归档时间: |
|
| 查看次数: |
3245 次 |
| 最近记录: |