我目前正在开发一些东西,它应该计算从Tweets文件中给出的单词。我正在替换特殊字符和单词,这些字符只有两个字符,用空格填充。因此,后来我可以得到双空格,我将在下一行中替换它。变量“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);
我的问题是,生成的单词列表具有其频率,包含空字符串。大多数情况下,这是最常见的字符串。我不知道它来自哪里以及如何摆脱它并希望有人可以帮助我。
答案 0 :(得分:1)
待办事项
tweet.trim().split(" +")
同时考虑将变音符号组合为单词\pM
。
tweet = tweet.replaceAll("[^\\d\\p{L}\\p{M}]", " ");
答案 1 :(得分:0)
我猜想当推文开始或以空格结尾时会出现空字符串。
tweet = tweet.trim(); // remove leading and trailing space
答案 2 :(得分:0)
由于您要用空格替换匹配的“单词”,您最终会在tweet
字符串的开头和结尾处以及在中间的多个空格序列。但是您使用单个空格作为分隔符来拆分它。空字符串代表连续空格之间的东西。
一种可能的解决办法:
tweet = tweet.trim();
for (String word : tweet.split("\\s+")) {
(正则表达式\s+
表示“一个或多个空白字符。”