代码目的:计算一段文本中重复出现的词的个数。
分两种情况:
1.文本在内存中
2.文本在硬盘文件上
方案利用ArrayList
声明一个类
public class Entity
{
String word;
float pValue;
public Entity()
{
pValue=0;
word="";
}
}
1.文本在内存中主类中有以下代码
String []words={"小","团圆","究竟","泄了","张爱玲","什么","秘密","2009年","04月","08日","09:56","天天","小","团圆","究竟","哈哈","张爱玲","全额","天涯","张爱玲"};
ArrayList<Entity> enList=new ArrayList();
for(String w: words)
{ w=w.trim();
Entity en=new Entity();
en.word=w;
en.pValue=1;
enList.add(en);
//System.out.println(w);
}
for(int i=0;i<enList.size()-1;i++)
{
if(!enList.get(i).word.isEmpty())
{
for(int j=i+1;j<enList.size();j++)
{
if(enList.get(i).word==enList.get(j).word)
{
enList.get(i).pValue++;
enList.get(j).pValue=0;
enList.get(j).word="";
}
}
}
}
for(Entity e : enList)
{
System.out.println(e.word+e.pValue);
}
System.out.println(enList.size());
结果如下
| 小2.0团圆2.0究竟2.0泄了1.0张爱玲3.0什么1.0秘密1.02009年1.004月1.0 |
2.文本在硬盘文件中
主类代码如下
public static void main(String[] args) throws FileNotFoundException,IOException
{
// TODO Auto-generated method stub;
String result=CutText("E:/自然语言处理/KL/sb.txt");
String []words=result.split("\\|");
ArrayList<Entity> enList=new ArrayList();
for(String w: words)
{ w=w.trim();
Entity en=new Entity();
en.word=w;
en.pValue=1;
enList.add(en);
//System.out.println(w);
}
for(int i=0;i<enList.size()-1;i++)
{
if(!enList.get(i).word.isEmpty())
{
for(int j=i+1;j<enList.size();j++)
{
if(enList.get(i).word==enList.get(j).word)
{
enList.get(i).pValue++;
enList.get(j).pValue=0;
enList.get(j).word="";
}
}
}
}
for(Entity e : enList)
{
System.out.println(e.word+e.pValue);
}
System.out.println(enList.size());
}
结果如下:
| 小1.0团圆1.0究竟1.0泄了1.0张爱玲1.0什么1.0秘密1.02009年1.004月1.0 |
可以看出当从硬盘中读文件后,该方法没有有效统计处文本中同一个词出现的个数
读取硬盘文件的函数以及分词函数如下
public static String GetFileText(String path) throws FileNotFoundException,IOException
{
InputStreamReader inStreamReader=new InputStreamReader(new FileInputStream(path));
//String strFile1=
BufferedReader bufReader=new BufferedReader(inStreamReader);
String line;
StringBuilder sb=new StringBuilder();
while((line=bufReader.readLine())!=null)
{
sb.append(line+" ");
}
inStreamReader.close();
bufReader.close();
String strFile=sb.toString();
return strFile;
}
/*this function cut a piece of text in to words sequeces*/
public static String CutText(String path)throws FileNotFoundException,IOException
{
String fileText=GetFileText(path);
MMAnalyzer analyzer=new MMAnalyzer();
String result =null;
String spliter="|";
try
{
result = analyzer.segment(fileText, spliter);
}
catch (IOException e)
{
e.printStackTrace();
}
//System.out.print(result);
return result;
}
但是如果将:
if(enList.get(i).word==enList.get(j).word)
{
enList.get(i).pValue++;
enList.get(j).pValue=0;
enList.get(j).word="";
}
改为
if([color=cyan]enList.get(i).word.equals(enList.get(j).word))[/color]
{
enList.get(i).pValue++;
enList.get(j).pValue=0;
enList.get(j).word="";
}
则两种情况下都能正确统计出同一个词的出现次数这是为啥呢?
为了方便大家研究,我把这段代码上传,其中用到了jeasey分词器,和lucene.jar
分享到:
相关推荐
这表明提供的教程资料可能是一个PDF文档,编号为5,可能是整个系列中的第五个文件,或者与"PTF4"相呼应,可能是其中的一个补充材料或案例研究。 综上所述,尽管描述部分没有提供任何具体信息,我们可以推测这份"ptf...
例如,如果用户试图交换不在同一行或同一列的两个数字块,程序应当提示错误并阻止操作。 ### 9. 源码结构 在`MiniProjectCode`文件中,我们可以看到整个项目的代码结构,包括类定义、方法实现、变量声明等。通过...
总的来说,这个压缩包为安卓开发者提供了一个实践树形控件的实例,通过深入研究和调试这个Demo,开发者可以学习到如何在Android平台上构建具有任意层次结构的用户界面,这对于开发复杂的数据展示和交互功能是十分有...
瀑布流布局,也被称为Pinterest样式布局,是一种在网页或移动应用中常见的展示方式,尤其在社交分享、图片浏览等场景下应用广泛。这种布局模仿了Pinterest网站的设计,以多列形式展示内容,使得页面看起来像流水一样...
其次,`javaexamples164`这个文件名看起来像是一个目录或文件夹,而非单独的文件。这通常意味着它可能包含了多个Java源代码文件(`.java`),示例类或者项目结构。在Java开发中,组织代码的方式很重要,常见的做法是...
`results`中包含一个ArrayList,每个元素都是一个含有多条可能匹配结果的数组。示例代码如下: ```java @Override public void onResults(Bundle results) { ArrayList<String> voiceResults = results....
在这个Adapter中,你需要维护一个数据集合,比如ArrayList,用于存储每个Item的EditText内容。 2. **ViewHolder**:实现ViewHolder模式,这样可以更高效地重用View。ViewHolder中包含对EditText的引用,便于快速...
在Windows Forms中,TabControl允许我们将多个窗体或内容区域组织到不同的选项卡下,提供了一种简洁的方式来展示和切换不同视图。在选项卡中嵌入DataGridView,可以使用户在一个界面上处理多个数据集,从而提高应用...
有经验的面向对象设计者会告诉你,要一下子就得到复用性和灵活性好的设计, 即使不是不可能的至少也是非常困难的。一个设计在最终完成之前常要被复用好几次,而且每一次都有所修改。 有经验的面向对象设计者的确能...
9. **策略模式**:定义了一系列算法,并将每一个算法封装起来,使它们可以互相替换,让算法的变化独立于使用算法的客户。 通过学习这些设计模式,开发者能够更好地理解和应用软件设计原则,提高代码的复用性和可...
【标题】"Java事例集合1"显然与Java编程语言相关,这可能是一个包含多个Java编程实例的资源包。在Java编程中,实例通常指的是具体的代码示例,用于展示某个概念或技术的运用。这个标题暗示我们可能会找到一系列用于...
在本项目中,“基于python+Java的疫情爬虫数据分类统计分析的设计与实现”是一个结合了两种编程语言的综合应用,旨在从网络上抓取疫情相关的数据,进行处理、分类和统计分析。该项目的核心目标是利用Python的爬虫...
Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能和丰富的类库而著名。"Java联想"这个主题可能指的是通过各种概念、技术或者最佳..."Java联想"可以帮助你将这些知识点串联起来,形成一个完整的知识体系。
Java火车票订购程序源码是一个基于Java Swing开发的桌面应用程序,它主要用于模拟和实现火车票的预订流程。Java Swing是Java Foundation Classes (JFC)的一部分,提供了丰富的图形用户界面(GUI)组件,使得开发者...
【压缩包子文件的文件名称列表】"5575757faga"看起来像是一个随机生成的文件名,这可能是一个错误或者是因为安全原因而省略了实际的文件名。在实际的项目中,压缩包通常会包含源代码文件(如.java)、配置文件(如....
《Java图书管理系统》是一款基于Java技术开发的毕业设计项目,旨在提供一个高效、便捷的图书管理解决方案。这个系统集成了图书的入库、出库、查询、借阅、归还等功能,实现了图书馆日常运营的核心业务流程。当年,这...
总结起来,"JAVA程序设计范例"是一个全面的学习资源,涵盖了Java编程的基础和高级概念,旨在帮助学习者掌握Java语言,理解面向对象编程思想,并通过实际示例提升编程技能。通过仔细研究提供的文件,无论是初学者还是...
源码中可能会有一个数据结构(如`ArrayList`)来存储这些数据,然后在绘制转盘时根据数据来决定扇区的数量、颜色和文字。 4. **动画控制**:为了模拟真实的物理效果,转盘在停止时可能需要添加阻尼动画,使得转盘...
数据结构与算法分析是计算机科学与软件工程领域的核心课程之一,它主要研究如何有效地存储、处理和组织数据,以及如何设计能够解决特定问题的算法。以下是从标题和描述中提取的知识点: 1. 数据结构基础: - 列表...
**LINQ(Language Integrated Query,语言集成查询)**是.NET框架中的一个重要组成部分,它为C#和Visual Basic等编程语言提供了强大的数据查询能力。在.NET 3.5版本中引入,LINQ允许开发者以一种更自然、更符合编程...