使用java从推文中排除一些单词

时间:2015-11-12 18:43:18

标签: java twitter

我试图编写一个程序来检索特定用户的推文并计算最常用的单词。在我的代码中,除了重复次数之外,我还会在用户时间线中写下每个单词。但我只需要获得最常用的单词和计数。

如何修复我的代码呢?

for(Status status2 : status){
    status2.getText();
    //System.out.println(status2.getCreatedAt());

    String s = status2.toString();
    String[] splitted = s.split(" ");
    HashMap hm = new HashMap();
    int x;  

    for (int i = 0; i < splitted.length; i++) {
        if (!hm.containsKey(splitted[i])) {
            hm.put(splitted[i], 1);
        } else {
            hm.put(splitted[i], (Integer) hm.get(splitted[i]) + 1);
        }
        for (Object word : hm.keySet()){
            System.out.println(word + " " + (Integer) hm.get(word));
        }
    }
}

1 个答案:

答案 0 :(得分:2)

我使用listString变量进行了此操作,但相同的概念适用于推文。只需遍历每条推文并获取消息所在的String,而不是循环遍历String对象中的List变量。

  • 在您的推文循环之外初始化map。当您在loop内初始化它时,它将为每条推文重新创建地图。这将删除您找到的所有数据。
  • 通过推文输出您map以外的值。否则,您将在每个推文迭代中输出数据。这可能是期望的结果,但从我收集到的不是你想要的。
  • 生活质量类型更新,但您应该使用foreach循环来循环分割数组。无需为int计数器使用额外的内存。

结果的问题在于您在每次迭代中重新创建地图,从而消除了以前的所有数据。如果在循环之前初始化地图,并且不重新初始化每次迭代,则可以在所有推文中跟踪数据。这样做的例子是:

public static void main(String[] args) throws Exception {

    List<String> statusTweets = new ArrayList<String>();
    statusTweets.add("At the bar");
    statusTweets.add("At the house");
    statusTweets.add("Out with friends");

    Map<String,Integer> wordHits = new HashMap<String,Integer>();

    for(String status : statusTweets){
        String[] statusSplitOnSpace = status.split(" ");
        for(String wordInStatus : statusSplitOnSpace){
            if (!wordHits.containsKey(wordInStatus)) {
                wordHits.put(wordInStatus, 1);
            } else {
                wordHits.put(wordInStatus, wordHits.get(wordInStatus)+1);
            }
        }
    }

    for(Entry<String,Integer> wordHit : wordHits.entrySet()){
        System.out.println("Word (" + wordHit.getKey() + ") was found " + wordHit.getValue() + " times.");
    }

}

循环后,您可以使用找到的数据执行所需操作。找到更高的单词数,删除某些单词等。我只是做了一个循环来输出结果。这给了我:

Word (the) was found 2 times.
Word (with) was found 1 times.
Word (bar) was found 1 times.
Word (At) was found 2 times.
Word (house) was found 1 times.
Word (friends) was found 1 times.
Word (Out) was found 1 times.