11111

该代码实现了一个名为DataPreProcess的类,用于对指定目录下的文件进行预处理,包括去除HTML标签,进行中文分词。它使用了IKAnalyzer分词工具,将处理后的结果保存到新文件中。
摘要由CSDN通过智能技术生成
package com.yxcx.gettrain;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringReader;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.wltea.analyzer.lucene.IKAnalyzer;
public class DataPreProcess {
public void doProcess(String strDir) throws IOException {
// strDir 要进行分词的网页的路径
System.out.println(strDir);
File fileDir = new File(strDir);
if (!fileDir.exists()) {
System.out.println("File not exist:" + strDir);
return;
}
File[] srcFiles = fileDir.listFiles();
String[] stemFileNames = new String[srcFiles.length];
for (int i = 0; i < srcFiles.length; i++) {
String fileFullName =
srcFiles[i].getCanonicalPath();
// 文件名称
String fileShortName = srcFiles[i].getName();
if (!new File(fileFullName).isDirectory()) {
System.out.println("Begin preprocess:" +
fileFullName);
StringBuilder stringBuilder = new
StringBuilder();
// 路径/名称
stringBuilder.append(strDir + "/" +
fileShortName);
createProcessFile(fileFullName,
stringBuilder.toString());
stemFileNames[i] =
stringBuilder.toString();
} else {
doProcess(fileFullName);
}
}
}
public static void createProcessFile(String fileFullName, String 
toFile) {
BufferedWriter bw = null;
BufferedReader br = null;
FileWriter fileWriter = null;
FileReader fileReader = null;
String line, resLine = null;
try {
StringBuilder sb = new StringBuilder();
fileReader = new FileReader(fileFullName);
br = new BufferedReader(fileReader);
// readLine 方法:一行一行的读取文件
// 去掉 a 标签和 html 标签
while ((line = br.readLine()) != null) {
String conts = "";
line = line.replaceAll("<a(.*?)</a>.",
"")
.replaceAll("</?[^>]+>",
"")
 .replaceAll("[^\\u4e00-\\u9fa5]", "");
 conts += line;
 // 开始进行中文分词,用/n 分割
 if (!conts.isEmpty()) {
 IKAnalyzer analyzer = new IKAnalyzer(true);
 // 通过分析器 Analyzer 将一个字符串创建成 Taken 流,第一个参数是一个名
字没有实际作用
 TokenStream tokenStream = analyzer.tokenStream("content",
 new StringReader(conts));
 while (tokenStream.incrementToken()) {
 // 保存相应词汇
 CharTermAttribute charTermAttribute = tokenStream
 .getAttribute(CharTermAttribute.class);
 sb.append(charTermAttribute.toString());
 sb.append("\n");
 }
 resLine = sb.toString();
 analyzer.close();
 }
 }
 fileWriter = new FileWriter(toFile);
 bw = new BufferedWriter(fileWriter);
 bw.write(resLine);
 } catch (Exception e) {
 e.printStackTrace();
 } finally {
 try {
 bw.close();
 br.close();
 fileWriter.close();
 fileReader.close();
 } catch (IOException e) {
 e.printStackTrace();
 }
 }
 }
 /**
 * @param args
 * @throws IOException
 */
 public void BPPMain(String[] args) throws IOException {
 // TODO Auto-generated method stub
 DataPreProcess dataPrePro = new DataPreProcess();
 dataPrePro.doProcess("/data/classifydata/traindata/");
 }
 }

在计算机中,整数通常使用补码形式表示。1.11111是一个小数,但是计算机中的补码是针对整数的概念。如果你想要知道1.11111这个数转换成整数的二进制补码表示形式,首先需要确定你要使用的位数来表示这个整数。 例如,如果你使用8位来表示这个整数,那么我们首先要将小数部分转换成二进制数,然后取其补码。但是小数部分转换成二进制可能会是一个无限循环的过程,因此实际上在计算机中通常是将小数进行截断或四舍五入到一定的精度。在这种情况下,我们假设只保留小数点后五位,即1.11111作为整数部分1和小数部分0.11111。 现在我们关注小数部分0.11111的二进制表示(假设使用8位精度): ``` 0.11111(二进制) ≈ 0.01111100(二进制) ``` 这是因为0.11111二进制转换为十进制后略大于0.9,而0.01111100二进制转换为十进制是略小于0.9375。为了得到补码,我们还需要考虑整数部分1。在8位二进制中,整数1的原码是00000001,其反码是11111110,补码是反码加1,即11111111。 因此,如果1.11111被近似为1.01111100并使用8位二进制表示,其补码大约是: ``` 整数部分:11111111(补码表示的-1) 小数部分:01111100(二进制近似表示的0.9375) ``` 综上所述,对于1.11111这个小数,如果我们将其近似为1+0.9375,并使用8位二进制表示,其补码大约是: ``` 11111111.01111100 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值