java倒排索引_用Java编写简单的文本文档倒排索引

其实我也不懂,但是我在百度文库那儿帮你搜了下文档,你看看可行不。

import java.io.*;

import java.text.*;

import java.util.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class TextSY extends JFrame implements ActionListener {

public static void main(String[] args) {

TextSY mf = new TextSY();

}

JTextField tf = null;

public TextSY() {

// 搜索器的图形界面

super("倒排索引建立");

this.setLayout(new FlowLayout());

this.setSize(300, 200);

this.setBackground(new Color(200, 200, 200));

this.setResizable(false);

// 窗口大小不能改变

//将窗口放在屏幕中间的方法

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

Dimension frameSize = getSize();

if (frameSize.height > screenSize.height) {

frameSize.height = screenSize.height;

}

if (frameSize.width > screenSize.width) {

frameSize.width = screenSize.width;

}

setLocation((screenSize.width - frameSize.width) / 2,

(screenSize.height - frameSize.height) / 2);

tf = new JTextField("d:/源文件.txt", 18);

JButton b = new JButton("进行倒排索引");

// JButton b_scanfile = new JButton("浏览文件"); //设置浏览文件功能按钮

this.add(new Label("文件名:"));

this.add(tf);

// this.add(b_scanfile);

this.add(b);

b.addActionListener(this);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

setVisible(true);

}

public void actionPerformed(ActionEvent e) {

ArrayList a1 = null; // 用于存放导入的数据 加上了

ArrayList a2 = null; // 用于存放排序后的数据

ArrayList a3 = null; // 用于存放合并后的数据

a1 = addNumber(); // 将文件中的内容加上行数

System.out.println("排序后数据");

a2 = sortNumber(a1,0,a1.size()-1);//给ArrayList排序

for (int i = 0; i < a2.size(); i++) { // 得到ArrayList的大小 用size()方法

System.out.println(a2.get(i)); // 得到ArrayList中第i个数的值的方法为get(i)

}

System.out.println("倒排结果");

a3 = deleNumber(a2);

for (int i = 0; i < a3.size(); i++) { // 得到ArrayList的大小 用size()方法

System.out.println(a3.get(i)); // 得到ArrayList中第i个数的值的方法为get(i)

}

print(a3);

}

public void print(ArrayList a){

System.out.println("OK");

PrintWriter pw;

try {

pw = new PrintWriter(new FileWriter( new File("d:/倒排索引结果.txt") ));

for (int i = 0; i < a.size(); i++) { // 得到ArrayList的大小 用size()方法

pw.println(a.get(i));

}

} catch (IOException e) {

e.printStackTrace();

}

}

// 将文件中的内容加上行数

public ArrayList addNumber() {

ArrayList al = null;

FileInputStream fi = null;

InputStreamReader isr = null;

BufferedReader dis = null;

try {

fi = new FileInputStream(tf.getText());

isr = new InputStreamReader(fi);

dis = new BufferedReader(isr);

}

catch (FileNotFoundException e1) {

// ta.setText("找不到你所需要的文件!");

System.out.println("找不到你所需要的文件!");

} catch (IOException e2) {

System.out.println("输入或输出有误!");

e2.printStackTrace();

}

try {

int count = 1;

String ss = "";

al = new ArrayList(); // 用于存放读入的数据 加上了序号

String s = dis.readLine();

while (s!=null) {

for (int i = 0; i < s.length(); i++) {

if( (s.charAt(i)>='a'&&s.charAt(i)<='z') ||

(s.charAt(i)>='A'&&s.charAt(i)<='Z') ||

s.charAt(i)==' '){

if (i!=s.length()-1 && s.charAt(i) != ' ') { // i!=s.length()-1 是用于判断是否是最后一个字符串 如果是就挑到下面

ss = ss + s.charAt(i);

}

else {

if(i==s.length()-1 && s.charAt(i)!=' '){// 当为最后一个字符串时 没有把最后一个字母加上就挑到这里 所以要加上

ss=ss+s.charAt(i);

}if(ss!=""){ // 排除多余的空格干扰

ss = ss + " " + count;

al.add(ss);

}

ss = "";

}

}

}

count++;

s = dis.readLine();

}

dis.close();

} catch (IOException e2) {

System.out.println("输入或输出有误!");

e2.printStackTrace();

}

return al;

}

//给ArrayList排序

public ArrayList sortNumber(ArrayList a, int low, int high) {

int n = a.size();

int i = low;

int j = high;

String temp = a.get(low).toString();

while (i < j) {

while (i < j && a.get(j).toString().compareTo(temp) > 0) {

j--;

}

if (i < j) {

//a[i] = a[j];

a.set(i,a.get(j));

i++;

}

while (i < j && a.get(i).toString().compareTo(temp) <= 0) {

i++;

}

if (i < j) {

//a[j] = a[i];

a.set(j,a.get(i));

j--;

}

}

//a[i] = temp;

a.set(i,temp);

if (i > low)

sortNumber(a, low, i - 1);

if (i < high)

sortNumber(a, i + 1, high);

return a;

}

//删除ArrayList中的相同项 合并相同的项

public ArrayList deleNumber(ArrayList a){

a.add(" ");

ArrayList b=new ArrayList();

String resultStr=null; //合并后的值存放在这个字符串中

for(int i=0;i

String p="" ,pNumber="",pnext="",pnextNumber=""; // p 是用来存放当前的字符串 pNumber是用来存放字符串的标号

String pstr,pstrNext;

if(i+1 < a.size()){

pstr=a.get(i).toString();

pstrNext=a.get(i+1).toString();

}

else

break;

if(pstr.equals(pstrNext)){ // 如果两个字符串完全相同

continue;

}

else

{

int m=0;

while(pstr.charAt(m)!=' '){

p=p+pstr.charAt(m);

m++;

}

for(int mm=m;mm

pNumber=pNumber+pstr.charAt(mm);

}

int n=0;

while(pstrNext.charAt(n)!=' '){

pnext=pnext+pstrNext.charAt(n);

n++;

}

for(int nn=n;nn

ext.length();nn++){

pnextNumber=pnextNumber+pstrNext.charAt(nn);

}

if(p.equals(pnext)){ // 如果字符串相同,数值不同

if(resultStr==null){ //第一次出现字符串重复

resultStr = pstr+pnextNumber;

}

else{ //多次出现前面的字符串重复 数字不同

resultStr = resultStr +pnextNumber;

}

}

else{

if(resultStr==null){ //字符串不相同时,且只出现一次

b.add(pstr);

}

else{

b.add(resultStr); // 字符串不相同时,且前一个字符串出现了多次

resultStr=null;

}

}

}

}

return b;

}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
程序 = 数据结构 + 算法  程序是为了解决实际问题而存在的。然而为了解决问题,必定会使用到某些数据结构以及设计一个解决这种数据结构的算法。如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功。编程实战算法,不是念PPT,我们讲的就是实战与代码实现与企业应用。程序 = 数据结构 + 算法                ——图灵奖得主,计算机科学家N.Wirth(沃斯)作为程序员,我们做机器学习也好,做python开发也好,java开发也好。有一种对所有程序员无一例外的刚需 —— 算法与数据结构日常增删改查 + 粘贴复制 + 搜索引擎可以实现很多东西。同样,这样也是没有任何竞争力的。我们只可以粘贴复制相似度极高的功能,稍复杂的逻辑没有任何办法。语言有很多,开发框架更是日新月异3个月不学就落后我们可以学习很多语言,很多框架,但招聘不会考你用5种语言10种框架实现同一个功能。真正让程序员有区分度,企业招聘万年不变的重点 —— 算法与数据结构。算法代表程序员水平的珠穆朗玛。 本视频由微软全球最有价值专家尹成录制,拒绝念PPT,代码实战数据结构与算法导论。除了传统数据结构算法,加入高并发线程安全数据结构,分布式负载均衡算法,分布式哈希表,分布式序等等现代算法。  算法,晦涩难懂,却又是IT领域受重视的素养之一。可以说,算法能力往往决定了一个程序员能够走多远。因此,BAT/FLAG等国内外各大名企非常喜欢在面试环节考核求职者的算法编程,这也成为了无数准程序员们过不去的一道“坎”。如何入门并成为一名出色的算法工程师?但无论半路出家还是科班出身,除学生时代搞算法竞赛的同学外真正用心学习过算法与数据结构太少太少。对于后期想要学习算法与数据结构却不得不面对以下问题:没有自己的知识框架,无法关联知识点,学习效率低有疑问而无人解答,有问题无法理解全靠猜测,一个问题卡好几天市面上资料题解质量参差不齐,正确性未可知Google算法-工程师尹成大哥学习算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值