正文提取算法

自己写的一个正文提取算法,在三个网站上测试没问题

需要使用第三方的jar jsoup

 

package com.extract;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class ExtractNovel {

	public static void main(String[] args) throws IOException {

		//dijiuzww.com
		String test = FileUtils
				.readFileToString(new File("C://Users//Administrator//Desktop//sina.com"));
//		String test = FileUtils
//				.readFileToString(new File("C://Users//Administrator//Desktop//testextaractContent.txt"));
//	
		Document doc = Jsoup.parse(test);
		doc = denoiseElementForDoc(doc);
		// System.out.println(doc.text());
		int size = doc.text().length();
		Element e = doc.getAllElements().get(0);
		Element target[] = new Element[1];
		check(e,size);
	
	}
	
	public static void check(Element e, float size) {

		Element son = findRealSon(e, size);
		System.out.println(son.toString());
		System.out.println(son.text());
	}
	
	
	public static Element findRealSon(Element e, float size) {
		Elements els = e.children();
		Element son = null;
		for (Element tempson : els) {
			float length = tempson.text().length();
			if (length / size > 0.75) {
				Element element = findRealSon(tempson, size);
				if(element ==null){
					son =  tempson;
					return son;
				}else{
					son = element;
				}
			}
		}
		return son;
		

		

	}
	
	public static Document denoiseElementForDoc(Document document) {
		document.getElementsByTag("script").remove();
		document.getElementsByTag("style").remove();
		document.getElementsByTag("select").remove();
		document.getElementsByTag("link").remove();
		document.getElementsByTag("input").remove();
		document.getElementsByTag("object").remove();
		document.getElementsByTag("textarea").remove();
		 
		document.getElementsByTag("ul").remove();
		document.getElementsByTag("img").remove();
		document.getElementsByTag("a").attr("href", "javascript:void(0)").remove();
		document.getElementsByAttributeValue("display", "none").remove();
		 
		document.getElementsByAttributeValueStarting("class", "foot").remove();
		document.getElementsByAttributeValue("class", "settings").remove();
		document.getElementsByAttributeValueContaining("style", "display:none").remove();
		document.getElementsByAttributeValueContaining("style", "overflow: hidden").remove();
		return document;
	}
}

 

转载于:https://my.oschina.net/u/1246109/blog/849669

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 示例:from sklearn.naive_bayes import GaussianNB# 创建贝叶斯分类器 gnb = GaussianNB()# 训练模型 gnb.fit(X, y)# 预测样本 prediction = gnb.predict(X_test) ### 回答2: 贝叶斯分类算法是一种常用的机器学习算法,用于进行分类预测。以下是基于贝叶斯分类算法的预测代码示例: 假设我们要使用贝叶斯分类算法对电子邮件进行分类,分为垃圾邮件和正常邮件两类。我们首先需要准备训练数据集,包括带有分类标签的邮件样本。对于每个邮件,我们需要提取特征,例如邮件正文中出现的关键词。 接下来,我们使用贝叶斯分类算法对该训练数据集进行训练,构建分类器。贝叶斯分类算法基于贝叶斯定理,结合训练数据计算出每个词语在垃圾邮件和正常邮件中的条件概率。 在预测阶段,我们可以使用训练好的分类器对新的未知邮件进行分类。对于待预测的邮件,我们提取相同的特征,计算出该邮件属于垃圾邮件和正常邮件的概率。将概率较高的类别作为预测结果。 示例代码如下: ```python import numpy as np class NaiveBayesClassifier: def __init__(self): pass def train(self, X, y): self.classes = np.unique(y) self.num_classes = len(self.classes) self.priors = np.zeros(self.num_classes) for i, c in enumerate(self.classes): self.priors[i] = np.sum(y == c) / len(y) self.likelihoods = [] for i, c in enumerate(self.classes): X_c = X[y == c] likelihood = {} for feature in range(X.shape[1]): likelihood[feature] = {} values, counts = np.unique(X_c[:, feature], return_counts=True) for value, count in zip(values, counts): likelihood[feature][value] = count / np.sum(y == c) self.likelihoods.append(likelihood) def predict(self, X): posteriors = [] for i, c in enumerate(self.classes): prior = np.log(self.priors[i]) posterior = 0 for feature in range(X.shape[1]): likelihood = self.likelihoods[i][feature].get(X[feature], 1e-9) # 平滑处理避免概率为0 posterior += np.log(likelihood) posteriors.append(prior + posterior) return self.classes[np.argmax(posteriors)] # 训练数据集 X_train = np.array([ [1, 0, 1, 1], [1, 1, 0, 1], [0, 1, 1, 1], [0, 0, 1, 0] ]) y_train = np.array([1, 1, 0, 0]) # 构建分类器 classifier = NaiveBayesClassifier() classifier.train(X_train, y_train) # 测试数据 X_test = np.array([1, 0, 0, 1]) # 预测 predicted_class = classifier.predict(X_test) print(predicted_class) ``` 以上代码实现了一个简单的贝叶斯分类器。在训练阶段,通过计算先验概率和条件概率,得到一个分类器。在预测阶段,通过计算邮件属于不同类别的概率,并选择概率最大的类别作为预测结果。运行以上代码,将输出预测结果。请注意,以上只是一个示例,实际应用中可能需要更复杂的特征提取和模型调优。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值