【问题标题】:word clustering in javajava中的词聚类
【发布时间】:2014-04-23 19:38:40
【问题描述】:

我有一个非常大的文本文件。 例如,我想对该文件进行聚类 如果我想将文件分成 5 个集群,那么 从 A 到 Z 词频然后每个簇的质心应该是 c,h,m,r,w
所以输出应该像
最初所有单词都是 a,b,c,d,e
然后 f,g,h,i,j
然后 k,l.m.n.o
然后 p,q,r,s,t
然后是 u,v,w,x,y 和 z

我想在 java 中实现这种类型的集群。 我已经搜索了代码,但在java中找不到单词聚类程序。

【问题讨论】:

  • 如果你有一个好的实现,你的“非常大”可能仍然可以很容易地在内存中处理,而不需要集群。但是我们不知道您的问题出在哪里,因为您没有显示任何代码。
  • 谢谢先生的回答。我已经在java中完成了k-means聚类的编码,但它只适用于数字。
  • 这是代码

标签: java cluster-analysis


【解决方案1】:

好吧,但我的第一句话是,到目前为止,您尝试了哪些方法,您的代码在哪里?然后,我想你知道在你向他们展示你的努力之前,这里的任何人都不会去为你编写代码。找到一些聚类参考并不像Google 那样困难。 一些很好的参考供您开始:

了解他们如何实现聚类,然后在那里应用您的算法。

【讨论】:

    【解决方案2】:

    用于机器学习/数据挖掘的完善 Java 库是 Weka。它提供了几种不同类型的集群技术,您可以尝试使用这些技术,这些技术的 API 是 documented here

    他们的下载页面带有各种特定于平台的版本以及安装程序等,但我建议只下载zip,解压缩 jar,然后像使用任何其他 jar 一样使用它(即添加到类路径)然后您就可以完全访问 Weka 模块/API。

    【讨论】:

      【解决方案3】:
      enter code here
          import java.util.*;
          class k_means
          {
      static int count1,count2,count3;
      static int d[];
      static int k[][];
      static int tempk[][];
      static double m[];
      static double diff[];
      static int n,p;
      static int cal_diff(int a) 
      {
      int temp1=0;
      for(int i=0;i<p;++i)
      {
      if(a>m[i])
      diff[i]=a-m[i];
      else
      diff[i]=m[i]-a;
      }
      int val=0;
      double temp=diff[0];
      for(int i=0;i<p;++i)
      {
      if(diff[i]<temp)
      {
      temp=diff[i];
      val=i;
      }
      }
      return val;
          }
      static void cal_mean() 
      {
      for(int i=0;i<p;++i)
      m[i]=0; 
      int cnt=0;
      for(int i=0;i<p;++i)
      {
      cnt=0;
      for(int j=0;j<n-1;++j)
      {
      if(k[i][j]!=-1)
      {
      m[i]+=k[i][j];
      ++cnt;
      }
      }
      m[i]=m[i]/cnt;
      }
      }
      static int check1()
      {
      for(int i=0;i<p;++i)
      for(int j=0;j<n;++j)
      if(tempk[i][j]!=k[i][j])
      {
      return 0;
      }
      return 1;
      }
      public static void main(String args[])
      {
      Scanner scr=new Scanner(System.in);
      System.out.println("Enter the number of elements ");
      n=scr.nextInt();
      d=new int[n];
      System.out.println("Enter "+n+" elements: ");
      for(int i=0;i<n;++i)
      d[i]=scr.nextInt();
      System.out.println("Enter the number of clusters: ");
      p=scr.nextInt();
      k=new int[p][n];
      tempk=new int[p][n];
      m=new double[p];
      diff=new double[p];
      for(int i=0;i<p;++i)
      m[i]=d[i];
      int temp=0;
      int flag=0;
      do
      {
      for(int i=0;i<p;++i)
      for(int j=0;j<n;++j)
      {   
      k[i][j]=-1;
      }
      for(int i=0;i<n;++i) 
      {
      temp=cal_diff(d[i]);
      if(temp==0)
      k[temp][count1++]=d[i];
      else
      if(temp==1)
      k[temp][count2++]=d[i];
      else
      if(temp==2)
      k[temp][count3++]=d[i]; 
      }
      cal_mean();
      flag=check1();
      if(flag!=1)
      for(int i=0;i<p;++i)
      for(int j=0;j<n;++j)
      tempk[i][j]=k[i][j];
      System.out.println("\n\nAt this step");
      System.out.println("\nValue of clusters");
      for(int i=0;i<p;++i)
      {
      System.out.print("K"+(i+1)+"{ ");
      for(int j=0;k[i][j]!=-1 && j<n-1;++j)
      System.out.print(k[i][j]+" ");
      System.out.println("}");
      }
      System.out.println("\nValue of m ");
      for(int i=0;i<p;++i)
      System.out.print("m"+(i+1)+"="+m[i]+"  ");
      count1=0;count2=0;count3=0;
      }
      while(flag==0);
      System.out.println("\n\n\nThe Final Clusters By Kmeans are as follows: ");
      for(int i=0;i<p;++i)
      {
      System.out.print("K"+(i+1)+"{ ");
      for(int j=0;k[i][j]!=-1 && j<n-1;++j)
      System.out.print(k[i][j]+" ");
      System.out.println("}");
      }
      }
          }
      

      【讨论】:

        猜你喜欢
        • 2013-04-19
        • 2016-02-16
        • 2011-01-28
        • 2017-06-16
        • 2019-10-29
        • 2017-06-07
        • 1970-01-01
        • 2020-04-16
        • 2018-03-14
        相关资源
        最近更新 更多