2016-02-21 81 views
-2

这是一个家庭作业问题,我坚持了很长时间。我们正在学习一些关于搜索引擎技术的索引文件,统计每个单词出现在它们中的次数。必须创建两个类; 期限文件创建一个简单的搜索引擎模型

期限类有:字符串命名WORD,INT频率(字计数频率),一个构造函数中的一个字和一个频率和初始化对象,获取的方法和设置方法(但没有为freq设置方法)。

文献类,问题询问创建名为术语存储的字符串的话(I给出由空格分开它们),日提交的测量SQRT(求和双大小的阵列(术语 [i] .freq)^ 2);其中freq是字符串中每个不同单词的频率。我必须创建一个构造函数,它将单个String参数作为全文,将其转换为小写,将其分解为白色接下来我要创建一个静态的排序方法,而不需要java.util.Arrays的帮助来按字母顺序排序字符串数组。然后我将创建一个countDistinctStrings方法取排序后的字符串作为参数,并计算唯一字数(忽略重复)。然后调用一个名为的索引内容,它将文档中的单词数组作为参数,填充条目数组,并计算大小,我刚才提到的方法首先确定原始数组中有多少不同的项,然后创建一个条目数组的大小。它将排序顺序中的条款的唯一字符串,并提供频率在一张桌子里。输出应该是这样的: +输入文档的文本: 我想我找到了一些更好的声音,没有人听说过我希望我有一个更好的声音,唱一些更好的话

词频列表: a〜1,有〜1,〜1,〜1,〜3,〜〜,〜〜〜,〜〜〜,〜〜〜,〜〜〜〜〜〜 ,发现〜1,没有了〜1,声音〜1,也就是说〜1(但在一个表)幅度 6.708

这是迄今为止我尝试:期限

class Term { 
private String word; 
private int freq; 
Term(String word,int freq){ 
    this.word = word; 
    this.freq = freq; 
} 

public String getWord() 
{ 
    return word; 
} 

public int getFreq() 
{ 
    return freq; 
} 

public void setFreq(int freq) 
{ 
    this.freq = freq; 
} 

} 

然后文件类:(注意代码是不完整的,因为我不知道如何采取下一步,即如何让数组排序方法为其他countDistinctStrings.I甚至不能用我的对象调用的方法,这将引发异常线程“main”显示java.lang.NullPointerException

import java.util.*; 

public class Document 
{ 
String text; 
private double magnitude; 
static String terms []; 

Document(String text) { 
this.text = text; 
text = text.toLowerCase(); 
String [] terms = text.split("\\s+"); 
for (String s : terms) 
System.out.println(s); 

} 
private static void sort (String [] terms) { 
    String tempVar; 
    for (int i = 0; i < terms.length;i++) { 
     for(int j = 0; j <terms.length ; j++) { 
       if(terms[i].compareTo(terms[j]) > 0) { 
         tempVar = terms [j]; 
         terms [j ]= terms [i]; 
         terms [i] = tempVar; 
       } 
      } 
     } 
     } 
private void countDistinctStrings() { 
    Document.sort(terms); 
} 


public double getMagnitude(){ 
return magnitude; 
} 
public static void main(String [] args) { 
Scanner input = new Scanner(System.in); 
System.out.println("Enter the document text : "); 
String text = input.nextLine(); 
Document object = new Document(text); 
object.sort(terms); 

} 
} 

我是一个beginner.I会很感激别人的帮助和时间在我的学习process.This功课现在已经过期了,但我真的很喜欢nt做到这一点并理解它。

+0

Afif,您的代码的第一个问题是在Document的构造函数中。您错误地重新定义了条款。删除'String []'部分,因此它只是'terms = text.split ...并且你会越过这个错误。 –

+0

@ Ian.Many谢谢你的建议,现在它不会抛出空指针异常。但是,我仍然没有得到按字母顺序排序的字符串。 – Afif

+0

我运行了你的代码,它确实按照相反的顺序排序。如果要按顺序排序,请将compareTo行从“>”更改为“<”。 –

回答

1
  1. 卸下 '字符串[]' 从构造
  2. 更改 '>' 到 '<' 上的compareTo线

    public static void main(String[] args) { 
        Scanner input = new Scanner(System.in); 
        System.out.println("Enter the document text : "); 
        String text = input.nextLine(); 
        Document object = new Document(text); 
        object.sort(terms); 
        System.out.println("--- AFTER SORT ----"); 
        for (String s : terms) 
         System.out.println(s); 
    
    } 
    

输出:

Enter the document text : 
I wish I found some better sounds no one's ever heard I wish I had a better voice that sang some better words 
i 
wish 
i 
found 
some 
better 
sounds 
no 
one's 
ever 
heard 
i 
wish 
i 
had 
a 
better 
voice 
that 
sang 
some 
better 
words 
--- AFTER SORT ---- 
a 
better 
better 
better 
ever 
found 
had 
heard 
i 
i 
i 
i 
no 
one's 
sang 
some 
some 
sounds 
that 
voice 
wish 
wish 
words 
+0

@Ian,是的它的工作。让我看看我是否可以将它们存储在一个数组中,并计算出频率,以获得与问题中提到的完全相同的输出。但是,您帮助我解决了最困难的部分。我无法找到什么是错,但只是一个标志,“<”,哟......上帝保佑你。 – Afif

+1

非常好完成Afif。大部分完美的代码。如果您在下一节遇到问题,请告诉我。干杯。 –