亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? articleclassifierimpl.java

?? 一個簡單的kNN算法實現(xiàn)
?? JAVA
字號:
package article.service.impl;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.Map.Entry;

import net.paoding.analysis.analyzer.PaodingAnalyzer;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Field.TermVector;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.TermFreqVector;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;

import article.entity.Article;
import article.entity.Category;

/**
 * @author ahuaxuan(aaron zhang)
 * @since 2008-2-18
 * @version $Id$
 */
public class ArticleClassifierImpl {

	private static transient Log logger = LogFactory.getLog(ArticleClassifierImpl.class);
	private double vectorGene = 2;
	
	public Map<String, List<String>> matchArticle(List<Category> categoryList, List<Article> articleList) {
		try {
			Map<String, Map<String, Integer>> classVector = getClassVector(categoryList);
			Map<String, Map<String, Integer>> articleVector = getArticleVector(articleList);
			
			return analyse(articleVector, classVector);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			logger.error("", e);
			return Collections.emptyMap();
		}
	}
	
	protected Map<String, List<String>> analyse(Map<String, Map<String, Integer>> articleVectorMap, Map<String, Map<String, Integer>> categoryVectorMap) {
		
		Map<String, List<String>> map = new HashMap<String, List<String>>();
		
		for (Entry<String, Map<String, Integer>> copyrightEntry : categoryVectorMap.entrySet()) {
			List<String> itemIdList = new ArrayList<String>();
			
			Map<String, String> tempMap = new HashMap<String, String>();
			
			for (Entry<String, Map<String, Integer>> itemEntry : articleVectorMap.entrySet()) {
				double acos = caculateVector(itemEntry.getValue(), filterVectorMap(copyrightEntry.getValue()));
				if (acos < vectorGene) {
					itemIdList.add(itemEntry.getKey());
					tempMap.put(itemEntry.getKey(), String.valueOf(acos));
				}
			}
			
			if (logger.isDebugEnabled()) {
				logger.debug(new StringBuilder().append("++++++++++++ ").append("article vector informations of category which id is ")
												.append(copyrightEntry.getKey()).append(" ++++++++"));
				for (Entry<String, String> e : tempMap.entrySet()) {
					logger.debug(new StringBuilder().append("articleId=").append(e.getKey())
													.append("---------").append("acos value=").append(e.getValue()));
				}
			}
			
			map.put(copyrightEntry.getKey(), itemIdList);
		}
		return map;
	}
	
	protected Map<String, Map<String, Integer>> getClassVector(List<Category> categoryList) throws Exception {
		
		if (categoryList == null || categoryList.size() == 0) {
			if (logger.isDebugEnabled()) {
				logger.debug("The list of new categoryList which should be classified is null or size = 0");
			}
			return Collections.emptyMap();
		}
		
		Map<String, Map<String, Integer>> categoryMap = new HashMap<String, Map<String, Integer>>();
		
		Directory ramDir = new RAMDirectory();
		IndexWriter writer = new IndexWriter(ramDir, new PaodingAnalyzer(), true);
//		IndexWriter writer = new IndexWriter(ramDir, new ChineseAnalyzer(), true);
		
		for (Category cRc : categoryList) {
			for (Article item : cRc.getArticleList()) {
				
				Document doc = new Document();
				doc.add(new Field("description", item.getContent(), Field.Store.NO,
						Field.Index.TOKENIZED, TermVector.YES));
				doc.add(new Field("category", cRc.getId().toString(), Field.Store.YES, Field.Index.NO));
				writer.addDocument(doc);
			}
		}
		
		if (logger.isDebugEnabled()) {
			logger.debug("Generate the index in the memory, the size of categoryList list is " + categoryList.size());
		}
		
		writer.close();
		
		buildContentVectors(ramDir, categoryMap, "category", "description");
		return categoryMap;
		
	}
	
	protected Map<String, Map<String, Integer>> getArticleVector(List<Article> articleList) throws Exception {
		if (articleList == null || articleList.size() == 0) {
			if (logger.isDebugEnabled()) {
				logger.debug("The list of articles which should be classified is null or size = 0");
			}
		}
		
		Map<String, Map<String, Integer>> articleMap = new HashMap<String, Map<String, Integer>>();
		
		Directory articleRamDir = new RAMDirectory();
//		IndexWriter writer = new IndexWriter(articleRamDir, new ChineseAnalyzer(), true);
		IndexWriter writer = new IndexWriter(articleRamDir, new PaodingAnalyzer(), true);
		
		for (Article article : articleList) {
			Document doc = new Document();
			doc.add(new Field("articleId", article.getId(),
					Field.Store.YES, Field.Index.NO));
			doc.add(new Field("description", article.getText(), Field.Store.NO, Field.Index.TOKENIZED, TermVector.YES));
			writer.addDocument(doc);
		}
		
		writer.flush();
		writer.close();
		
		buildContentVectors(articleRamDir, articleMap, "articleId", "description");
		return articleMap;
	}
	
	protected void buildContentVectors(Directory ramDir, Map<String, Map<String, Integer>> contentMap, String key, String fieldName) throws CorruptIndexException, IOException {
		IndexReader reader = IndexReader.open(ramDir);
		
		int numDocs = reader.numDocs();
		
		for (int k = 0; k < numDocs; k++) {
			if (!reader.isDeleted(k)) {
				Document doc = reader.document(k);
				
				String category = doc.getField(key).stringValue();
				
				Map<String, Integer> vectorMap = contentMap.get(category);
				
				if (vectorMap == null) {
					vectorMap = new TreeMap<String, Integer>();
					contentMap.put(category, vectorMap);
				} 
				
				TermFreqVector termFreqVector = reader.getTermFreqVector(k, fieldName);
				if (termFreqVector == null) {
					continue;
				}
				
				addTermFreqToMap(vectorMap, termFreqVector);
			}
			
		
		}
		
		reader.close();
	}
	
	protected void addTermFreqToMap(Map<String, Integer> vectorMap, TermFreqVector termFreqv) {
	
		
		String[] terms = termFreqv.getTerms();
		int[] freqs = termFreqv.getTermFrequencies();
		
		for (int i = 0; i < terms.length; i++) {
			String term = terms[i];
			
			if(vectorMap.containsKey(term)) {
				Integer value = (Integer) vectorMap.get(term);
				vectorMap.put(term, new Integer(value.intValue() + freqs[i]));
			} else {
				vectorMap.put(term, new Integer(freqs[i]));
			}
		}
	}
	
	protected Map<String, Integer> filterVectorMap(Map<String, Integer> map) {
		Map<String, Integer> vectorMap = new HashMap<String, Integer>();
		
		for (Entry<String, Integer> entry : map.entrySet()) {
			if (entry.getValue() > 3 && !StringUtils.isNumeric(entry.getKey()) && entry.getKey().length() > 1) {
				vectorMap.put(entry.getKey(), entry.getValue());
			}
		}
		return vectorMap;
	}
	
	public double caculateVector(Map<String, Integer> articleVectorMap, Map<String, Integer> classVectorMap) {
		if (articleVectorMap == null || classVectorMap == null) {
			if (logger.isDebugEnabled()) {
				logger.debug("itemVectorMap or classVectorMap is null");
			}
			
			return 20;
		}
		
		int dotItem = 0;
		int sumOfSquares = 0;
		int matchSize = 0;
		
		for (Entry<String, Integer> entry : articleVectorMap.entrySet()) {
			String word = entry.getKey();
			double categoryWordFreq = 0;
			
			if (classVectorMap.containsKey(word)) {
				categoryWordFreq = classVectorMap.get(word).intValue();
				++matchSize;
			}
			
//			dotItem += categoryWordFreq * Math.sqrt(entry.getValue());
			dotItem += categoryWordFreq;
			sumOfSquares += categoryWordFreq * categoryWordFreq;
		}
		
		double denominator;
		if (sumOfSquares == articleVectorMap.size()) {
			denominator = sumOfSquares;
		} else {
			denominator = Math.sqrt(sumOfSquares) * Math.sqrt(articleVectorMap.size());
		}
		
		double ratio =  dotItem / denominator;
		
		return Math.acos(ratio);
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲mv在线观看| 亚洲色图欧美激情| 极品少妇xxxx偷拍精品少妇| 91 com成人网| 蜜臀久久99精品久久久画质超高清| 欧美日韩精品福利| 久久99日本精品| 欧美激情一二三区| 91色在线porny| 亚洲综合视频在线观看| 91精选在线观看| 经典三级视频一区| 国产欧美综合色| 色乱码一区二区三区88| 日韩和欧美一区二区| 久久久久久久免费视频了| 波多野结衣欧美| 亚洲国产三级在线| 精品国精品自拍自在线| 高清不卡在线观看| 亚洲一区二区三区美女| 日韩欧美一区二区视频| 中文字幕乱码亚洲精品一区| 国产女人18水真多18精品一级做| 综合久久久久综合| 欧美日韩国产天堂| 精品综合久久久久久8888| 欧美国产欧美综合| 欧美三级日韩在线| 国产一区二区三区视频在线播放| 亚洲色图.com| 精品毛片乱码1区2区3区| 99久久精品情趣| 日韩成人dvd| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 欧美色倩网站大全免费| 精品一区二区在线观看| 亚洲免费资源在线播放| 欧美一级在线免费| 99国产精品99久久久久久| 奇米综合一区二区三区精品视频| 国产精品美女久久久久久久久久久| 91 com成人网| 一本一本大道香蕉久在线精品| 精品一区二区三区久久| 亚洲品质自拍视频| 久久综合999| 欧美在线999| 国产高清久久久| 麻豆91免费看| 亚洲777理论| 亚洲日韩欧美一区二区在线| 久久影院视频免费| 在线91免费看| 在线欧美日韩国产| 91欧美一区二区| 成人免费观看av| 国产资源在线一区| 久久国产精品露脸对白| 无码av免费一区二区三区试看 | 亚洲欧美偷拍另类a∨色屁股| 精品久久国产字幕高潮| 欧美日本一道本| 精品视频在线视频| 在线视频亚洲一区| 91论坛在线播放| 91丨porny丨在线| 成人91在线观看| 成人黄色av电影| 国产成人精品亚洲777人妖 | 91福利小视频| 在线观看视频91| 91国偷自产一区二区三区观看| 成人免费高清在线观看| 成人午夜av在线| 成人妖精视频yjsp地址| 国产美女娇喘av呻吟久久| 狠狠色2019综合网| 国产精品一区二区久久不卡| 国产一区999| 国产不卡视频一区二区三区| 国产成人av一区二区三区在线 | 成人aa视频在线观看| 懂色av一区二区三区蜜臀| 国产盗摄女厕一区二区三区| 国产成a人亚洲精品| 成人午夜视频网站| 91免费在线播放| 91福利在线观看| 在线91免费看| 精品国产91亚洲一区二区三区婷婷| 日韩欧美不卡一区| 久久久亚洲精品一区二区三区| 久久精品视频一区二区| 国产精品成人免费| 亚洲天堂成人在线观看| 亚洲福利国产精品| 久久电影网电视剧免费观看| 国产一区二区看久久| www.亚洲激情.com| 在线观看国产日韩| 日韩视频免费直播| 国产亚洲午夜高清国产拍精品| 欧美激情艳妇裸体舞| 亚洲午夜免费视频| 久久99久久精品| 成人精品视频一区| 欧美色图激情小说| 久久免费电影网| 一区二区三区中文字幕电影| 日韩成人伦理电影在线观看| 国产一区二区三区电影在线观看 | 国产在线视频一区二区三区| 成av人片一区二区| 欧美久久久久中文字幕| 久久综合视频网| 亚洲乱码国产乱码精品精的特点 | 99这里只有久久精品视频| 欧美亚洲动漫精品| 欧美精品一区二区久久久| 亚洲天堂成人在线观看| 久久精品国产成人一区二区三区| av午夜一区麻豆| 日韩美女视频一区二区在线观看| 中文字幕在线观看不卡| 日本大胆欧美人术艺术动态| 波多野结衣在线一区| 91精品国产91综合久久蜜臀| 国产精品久久久久久亚洲伦| 麻豆成人免费电影| 在线观看av一区| 国产丝袜欧美中文另类| 日韩成人av影视| 91免费看`日韩一区二区| 欧美不卡激情三级在线观看| 一区二区视频在线| 国产成人在线网站| 777久久久精品| 亚洲精选免费视频| 成人小视频免费观看| 欧美不卡一区二区三区| 日精品一区二区三区| 色婷婷综合中文久久一本| 欧美国产日韩a欧美在线观看| 免费观看久久久4p| 欧美日韩国产系列| 一区二区不卡在线播放| 99免费精品视频| 日本一区二区三区dvd视频在线 | 91麻豆国产精品久久| 国产亚洲精品免费| 久久99精品国产91久久来源| 欧美群妇大交群中文字幕| 一区二区三区精品在线观看| 成人性生交大片| 欧美激情一区二区三区全黄| 国内欧美视频一区二区| 日韩美女视频一区二区在线观看| 亚洲成av人片在www色猫咪| 91福利精品视频| 一区二区三区91| 欧美视频在线观看一区二区| 一二三区精品视频| 91精品91久久久中77777| 一级日本不卡的影视| 日本电影欧美片| 一区二区国产视频| 色婷婷久久99综合精品jk白丝 | 国产欧美日韩综合精品一区二区 | 国产精品欧美极品| 国产成人精品aa毛片| 国产网站一区二区| 成人动漫一区二区| 中文字幕日韩欧美一区二区三区| 成人黄色大片在线观看| 国产精品久久精品日日| 91免费国产在线观看| 一级日本不卡的影视| 欧美裸体一区二区三区| 日韩福利电影在线| 日韩三级视频在线看| 国产一区二区三区免费看| 久久久国际精品| 成人免费视频播放| 亚洲日本青草视频在线怡红院| 91久久精品国产91性色tv| 亚洲123区在线观看| 日韩美女在线视频| 成人美女在线观看| 夜夜精品视频一区二区| 欧美美女bb生活片| 国产伦精一区二区三区| 国产精品久久毛片av大全日韩| 色丁香久综合在线久综合在线观看| 亚洲一二三四在线观看| 91精品国产91久久综合桃花| 国产一区二区三区日韩| 亚洲精品成a人| 日韩欧美国产一区二区三区| 成人手机电影网|