1

我目前正在做一些事情,应该计算从推文文件中给出的单词。我正在用空格替换只有两个字符短的特殊字符和单词。因此,稍后我可以得到双空格,我将在下一行替换它。变量“words”是一个HashMap,其中存储了单词的对应频率。

tweet = tweet.replaceAll("[^\\d\\p{L} ]", " ");
tweet = tweet.replaceAll("\\b.{1,2}\\b", " ");
tweet = tweet.replaceAll("\\s{2,}",  " ");
tweet = tweet.toLowerCase();
for (String word : tweet.split(" ")){
if (words.containsKey(word)){
        words.put(word, words.get(word)+1);
} else {
        words.put(word, 1);

我的问题是,生成的单词列表及其频率包含空字符串。大多数时候,这是最常见的字符串。我不知道这是从哪里来的以及如何摆脱它,希望有人可以帮助我。

4

3 回答 3

1

tweet.trim().split(" +")

还可以考虑将变音符号组合为属于单词\pM

tweet = tweet.replaceAll("[^\\d\\p{L}\\p{M}]", " ");
于 2013-08-01T08:57:25.443 回答
0

我猜想当推文以空格开头或结尾时会出现空字符串。

tweet = tweet.trim(); // remove leading and trailing space 
于 2013-08-01T08:58:42.267 回答
0

由于您正在用空格替换匹配的“单词”,因此您最终将在tweet字符串的开头和结尾......以及中间出现多个空格的序列。但是您使用单个空格作为分隔符来拆分它。空字符串表示连续空格之间的内容。

一种可能的解决方法:

tweet = tweet.trim();
for (String word : tweet.split("\\s+")) {

(正则表达式的\s+意思是“一个或多个空白字符。)

于 2013-08-01T09:33:37.700 回答