楼主: Lisrelchen
1345 8

100 Best GitHub: Machine Learning [推广有奖]

  • 0关注
  • 62粉丝

VIP

院士

67%

还不是VIP/贵宾

-

TA的文库  其他...

Bayesian NewOccidental

Spatial Data Analysis

东西方数据挖掘

威望
0
论坛币
50164 个
通用积分
81.5628
学术水平
253 点
热心指数
300 点
信用等级
208 点
经验
41518 点
帖子
3256
精华
14
在线时间
766 小时
注册时间
2006-5-4
最后登录
2022-11-6

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Learning earning machine GitHub Learn Software

沙发
Lisrelchen 发表于 2016-4-25 03:48:33 |只看作者 |坛友微信交流群

使用道具

藤椅
Lisrelchen 发表于 2016-4-25 05:06:17 |只看作者 |坛友微信交流群
  1. #include "knn.h"

  2. #include <string>

  3. namespace kNN {

  4.   std::string to_string( kNN::PropertyType type ) {
  5.     switch (type) {
  6.       case kNN::PropertyType::House:
  7.         return "House";

  8.       case kNN::PropertyType::Apartment:
  9.         return "Apartment";

  10.       case kNN::PropertyType::Flat:
  11.         return "Flat";

  12.       default:
  13.         return "Not Found";
  14.     }
  15.   }

  16. }
复制代码

使用道具

板凳
Lisrelchen 发表于 2016-4-25 05:08:41 |只看作者 |坛友微信交流群
  1. from nltk.stem.porter import PorterStemmer
  2. import re
  3. from nltk.corpus import stopwords

  4. stop = stopwords.words('english')
  5. porter = PorterStemmer()

  6. def tokenizer(text):
  7.     text = re.sub('<[^>]*>', '', text)
  8.     emoticons = re.findall('(?::|;|=)(?:-)?(?:\)|\(|D|P)', text.lower())
  9.     text = re.sub('[\W]+', ' ', text.lower()) + ' '.join(emoticons).replace('-', '')
  10.     text = [w for w in text.split() if w not in stop]
  11.     tokenized = [porter.stem(w) for w in text]
  12.     return text
复制代码

使用道具

报纸
Lisrelchen 发表于 2016-4-25 07:05:08 |只看作者 |坛友微信交流群
  1. import java.io.*;
  2. import java.util.*;

  3. public class decisionTree {

  4.         public static void main(String[] args) throws Exception {
  5.                 if (args.length != 2) {
  6.                         System.out.println("Incorrect number of arguments");
  7.                         System.exit(0);
  8.                 }
  9.                 FileReader f = new FileReader(args[0]);
  10.                 BufferedReader br = new BufferedReader(f);
  11.                 ArrayList<String[]> data = new ArrayList<String[]>();
  12.                 int rCount = 0;
  13.                 int plus, minus;
  14.                 plus = minus = 0;
  15.                 String line = br.readLine();
  16.                 String[] title = line.split(",");
  17.                 while ((line = br.readLine()) != null) {
  18.                         String[] row = line.split(",");
  19.                         String key = row[row.length-1];
  20.                         if (key.equals("yes") || key.equals("A"))
  21.                                 plus++;
  22.                         else
  23.                                 minus++;
  24.                         rCount++;
  25.                         data.add(row);
  26.                 }
  27.                 br.close();
  28.                 System.out.println("["+plus+"+/"+minus+"-]");
  29.                 boolean result = false;
  30.                 if (plus > minus)
  31.                         result = true;
  32.                 TreeNode classifier = generateTree(data, title, result, -1, 0);
  33.                
  34.                 //train
  35.                 System.out.print("error (train): ");
  36.                 errorRate(data, rCount, classifier);
  37.                
  38.                 //test
  39.                 FileReader t = new FileReader(args[1]);
  40.                 br = new BufferedReader(t);
  41.                 ArrayList<String[]> test = new ArrayList<String[]>();
  42.                 int rTest = 0;
  43.                 line = br.readLine();
  44.                 while ((line = br.readLine()) != null) {
  45.                         String[] row = line.split(",");
  46.                         rTest++;
  47.                         test.add(row);
  48.                 }
  49.                 br.close();
  50.                
  51.                 System.out.print("error (test): ");
  52.                 errorRate(test, rTest, classifier);
  53.                
  54.         }
  55.         public static boolean predRow(String[] row, TreeNode classifier) {
  56.                 if (classifier.val == null)
  57.                         return classifier.result;
  58.                 if (row[classifier.col].equals(classifier.val))
  59.                         return predRow(row, classifier.left);
  60.                 else
  61.                         return predRow(row, classifier.right);
  62.         }
  63.         public static void errorRate(ArrayList<String[]> data, int n, TreeNode classifier) {
  64.                 int wrong = 0;
  65.                 for (String[] r : data) {
  66.                         if (predRow(r, classifier)) {
  67.                                 if (!r[r.length-1].equals("yes") && !r[r.length-1].equals("A"))
  68.                                         wrong++;
  69.                         } else {
  70.                                 if (r[r.length-1].equals("yes") || r[r.length-1].equals("A"))
  71.                                         wrong++;
  72.                         }
  73.                 }
  74.                 System.out.println((double) wrong/n);
  75.                
  76.         }
  77.         public static TreeNode generateTree(ArrayList<String[]> data, String[] title, boolean prevRes, int done, int level) {
  78.                 TreeNode root = new TreeNode(prevRes);
  79.                 if (level == 2)
  80.                         return root;
  81.                 double maxIG = 0;
  82.                 int split = 0;
  83.                 int colSize = data.get(0).length;
  84.                 for (int i = 0; i < colSize - 1; i++) {
  85.                         if (i == done)
  86.                                 continue;
  87.                         double IG = infoGain(data, i, colSize-1);
  88.                         if (IG > maxIG) {
  89.                                 maxIG = IG;
  90.                                 split = i;
  91.                         }       
  92.                 }
  93.                 if (maxIG < 0.1)
  94.                         return root;
  95.                 String val = null;
  96.                 String opp = null;
  97.                 int plus1, plus2, minus1, minus2;
  98.                 ArrayList<String[]> data1 = new ArrayList<String[]>();
  99.                 ArrayList<String[]> data2 = new ArrayList<String[]>();
  100.                 plus1 = plus2 = minus1 = minus2 = 0;
  101.                 for (String[] r : data) {
  102.                         if (val == null) {
  103.                                 val = r[split];
  104.                                 root.col = split;
  105.                                 root.val = val;
  106.                         }
  107.                         if (opp == null && !r[split].equals(val))
  108.                                 opp = r[split];
  109.                         if (r[split].equals(val)) {
  110.                                 data1.add(r);
  111.                                 if (r[r.length-1].equals("yes") || r[r.length-1].equals("A"))
  112.                                         plus1++;
  113.                                 else
  114.                                         minus1++;
  115.                         } else {
  116.                                 data2.add(r);
  117.                                 if (r[r.length-1].equals("yes") || r[r.length-1].equals("A"))
  118.                                         plus2++;
  119.                                 else
  120.                                         minus2++;
  121.                         }
  122.                 }
  123.                 if (level == 1)
  124.                         System.out.print("| ");
  125.                 System.out.println(title[split] + " = " + val + ": [" + plus1 + "+/" + minus1 +"-]");
  126.                 boolean result = false;
  127.                 if (plus1 > minus1)
  128.                         result = true;
  129.                 root.left = generateTree(data1, title, result, split, level+1);
  130.                
  131.                 if (level == 1)
  132.                         System.out.print("| ");
  133.                 System.out.println(title[split] + " = " + opp + ": [" + plus2 + "+/" + minus2 +"-]");
  134.                 result = false;
  135.                 if (plus2 > minus2)
  136.                         result = true;
  137.                 root.right = generateTree(data2, title, result, split, level+1);
  138.                
  139.                 return root;
  140.         }
  141.         public static double entropy(double p) {
  142.                 if (p == 1 || p == 0)
  143.                         return 0.0;
  144.                 return 0 - p*(Math.log(p)/Math.log(2.0)) - (1-p)*(Math.log(1-p)/Math.log(2.0));
  145.         }
  146.         public static double infoGain(ArrayList<String[]> data, int x, int y) {
  147.                 int[] xCount = new int[2];
  148.                 int[] yCount = new int[2];
  149.                 int[] yCond = new int[4];
  150.                 int rowCount = 0;
  151.                 if (data.size() == 0)
  152.                         return 0.0;
  153.                 String xPlus = data.get(0)[x];
  154.                 String yPlus = data.get(0)[y];
  155.                 for (String[] row : data) {
  156.                         rowCount++;
  157.                         if (row[x].equals(xPlus)) {
  158.                                 xCount[0]++;
  159.                                 if (row[y].equals(yPlus)) {
  160.                                         yCount[0]++;
  161.                                         yCond[0]++;
  162.                                 }
  163.                                 else {
  164.                                         yCount[1]++;
  165.                                         yCond[1]++;
  166.                                 }
  167.                         }
  168.                         else {
  169.                                 xCount[1]++;
  170.                                 if (row[y].equals(yPlus)) {
  171.                                         yCount[0]++;
  172.                                         yCond[2]++;
  173.                                 }
  174.                                 else {
  175.                                         yCount[1]++;
  176.                                         yCond[3]++;
  177.                                 }
  178.                         }
  179.                 }
  180.                 double px = (double) xCount[0]/rowCount;
  181.                 double py = (double) yCount[0]/rowCount;
  182.                 double py0 = (double) yCond[0]/xCount[0];
  183.                 double py1 = (double) yCond[2]/xCount[1];
  184.                 return entropy(py) - px*entropy(py0) - (1-px)*entropy(py1);
  185.         }
  186. }
复制代码

使用道具

地板
Lisrelchen 发表于 2016-4-25 07:07:01 |只看作者 |坛友微信交流群
  1. import java.io.*;
  2. import java.util.*;

  3. public class decisionTree {

  4.         public static void main(String[] args) throws Exception {
  5.                 if (args.length != 2) {
  6.                         System.out.println("Incorrect number of arguments");
  7.                         System.exit(0);
  8.                 }
  9.                 FileReader f = new FileReader(args[0]);
  10.                 BufferedReader br = new BufferedReader(f);
  11.                 ArrayList<String[]> data = new ArrayList<String[]>();
  12.                 int rCount = 0;
  13.                 int plus, minus;
  14.                 plus = minus = 0;
  15.                 String line = br.readLine();
  16.                 String[] title = line.split(",");
  17.                 while ((line = br.readLine()) != null) {
  18.                         String[] row = line.split(",");
  19.                         String key = row[row.length-1];
  20.                         if (key.equals("yes") || key.equals("A"))
  21.                                 plus++;
  22.                         else
  23.                                 minus++;
  24.                         rCount++;
  25.                         data.add(row);
  26.                 }
  27.                 br.close();
  28.                 System.out.println("["+plus+"+/"+minus+"-]");
  29.                 boolean result = false;
  30.                 if (plus > minus)
  31.                         result = true;
  32.                 TreeNode classifier = generateTree(data, title, result, -1, 0);
  33.                
  34.                 //train
  35.                 System.out.print("error (train): ");
  36.                 errorRate(data, rCount, classifier);
  37.                
  38.                 //test
  39.                 FileReader t = new FileReader(args[1]);
  40.                 br = new BufferedReader(t);
  41.                 ArrayList<String[]> test = new ArrayList<String[]>();
  42.                 int rTest = 0;
  43.                 line = br.readLine();
  44.                 while ((line = br.readLine()) != null) {
  45.                         String[] row = line.split(",");
  46.                         rTest++;
  47.                         test.add(row);
  48.                 }
  49.                 br.close();
  50.                
  51.                 System.out.print("error (test): ");
  52.                 errorRate(test, rTest, classifier);
  53.                
  54.         }
  55.         public static boolean predRow(String[] row, TreeNode classifier) {
  56.                 if (classifier.val == null)
  57.                         return classifier.result;
  58.                 if (row[classifier.col].equals(classifier.val))
  59.                         return predRow(row, classifier.left);
  60.                 else
  61.                         return predRow(row, classifier.right);
  62.         }
  63.         public static void errorRate(ArrayList<String[]> data, int n, TreeNode classifier) {
  64.                 int wrong = 0;
  65.                 for (String[] r : data) {
  66.                         if (predRow(r, classifier)) {
  67.                                 if (!r[r.length-1].equals("yes") && !r[r.length-1].equals("A"))
  68.                                         wrong++;
  69.                         } else {
  70.                                 if (r[r.length-1].equals("yes") || r[r.length-1].equals("A"))
  71.                                         wrong++;
  72.                         }
  73.                 }
  74.                 System.out.println((double) wrong/n);
  75.                
  76.         }
  77.         public static TreeNode generateTree(ArrayList<String[]> data, String[] title, boolean prevRes, int done, int level) {
  78.                 TreeNode root = new TreeNode(prevRes);
  79.                 if (level == 2)
  80.                         return root;
  81.                 double maxIG = 0;
  82.                 int split = 0;
  83.                 int colSize = data.get(0).length;
  84.                 for (int i = 0; i < colSize - 1; i++) {
  85.                         if (i == done)
  86.                                 continue;
  87.                         double IG = infoGain(data, i, colSize-1);
  88.                         if (IG > maxIG) {
  89.                                 maxIG = IG;
  90.                                 split = i;
  91.                         }       
  92.                 }
  93.                 if (maxIG < 0.1)
  94.                         return root;
  95.                 String val = null;
  96.                 String opp = null;
  97.                 int plus1, plus2, minus1, minus2;
  98.                 ArrayList<String[]> data1 = new ArrayList<String[]>();
  99.                 ArrayList<String[]> data2 = new ArrayList<String[]>();
  100.                 plus1 = plus2 = minus1 = minus2 = 0;
  101.                 for (String[] r : data) {
  102.                         if (val == null) {
  103.                                 val = r[split];
  104.                                 root.col = split;
  105.                                 root.val = val;
  106.                         }
  107.                         if (opp == null && !r[split].equals(val))
  108.                                 opp = r[split];
  109.                         if (r[split].equals(val)) {
  110.                                 data1.add(r);
  111.                                 if (r[r.length-1].equals("yes") || r[r.length-1].equals("A"))
  112.                                         plus1++;
  113.                                 else
  114.                                         minus1++;
  115.                         } else {
  116.                                 data2.add(r);
  117.                                 if (r[r.length-1].equals("yes") || r[r.length-1].equals("A"))
  118.                                         plus2++;
  119.                                 else
  120.                                         minus2++;
  121.                         }
  122.                 }
  123.                 if (level == 1)
  124.                         System.out.print("| ");
  125.                 System.out.println(title[split] + " = " + val + ": [" + plus1 + "+/" + minus1 +"-]");
  126.                 boolean result = false;
  127.                 if (plus1 > minus1)
  128.                         result = true;
  129.                 root.left = generateTree(data1, title, result, split, level+1);
  130.                
  131.                 if (level == 1)
  132.                         System.out.print("| ");
  133.                 System.out.println(title[split] + " = " + opp + ": [" + plus2 + "+/" + minus2 +"-]");
  134.                 result = false;
  135.                 if (plus2 > minus2)
  136.                         result = true;
  137.                 root.right = generateTree(data2, title, result, split, level+1);
  138.                
  139.                 return root;
  140.         }
  141.         public static double entropy(double p) {
  142.                 if (p == 1 || p == 0)
  143.                         return 0.0;
  144.                 return 0 - p*(Math.log(p)/Math.log(2.0)) - (1-p)*(Math.log(1-p)/Math.log(2.0));
  145.         }
  146.         public static double infoGain(ArrayList<String[]> data, int x, int y) {
  147.                 int[] xCount = new int[2];
  148.                 int[] yCount = new int[2];
  149.                 int[] yCond = new int[4];
  150.                 int rowCount = 0;
  151.                 if (data.size() == 0)
  152.                         return 0.0;
  153.                 String xPlus = data.get(0)[x];
  154.                 String yPlus = data.get(0)[y];
  155.                 for (String[] row : data) {
  156.                         rowCount++;
  157.                         if (row[x].equals(xPlus)) {
  158.                                 xCount[0]++;
  159.                                 if (row[y].equals(yPlus)) {
  160.                                         yCount[0]++;
  161.                                         yCond[0]++;
  162.                                 }
  163.                                 else {
  164.                                         yCount[1]++;
  165.                                         yCond[1]++;
  166.                                 }
  167.                         }
  168.                         else {
  169.                                 xCount[1]++;
  170.                                 if (row[y].equals(yPlus)) {
  171.                                         yCount[0]++;
  172.                                         yCond[2]++;
  173.                                 }
  174.                                 else {
  175.                                         yCount[1]++;
  176.                                         yCond[3]++;
  177.                                 }
  178.                         }
  179.                 }
  180.                 double px = (double) xCount[0]/rowCount;
  181.                 double py = (double) yCount[0]/rowCount;
  182.                 double py0 = (double) yCond[0]/xCount[0];
  183.                 double py1 = (double) yCond[2]/xCount[1];
  184.                 return entropy(py) - px*entropy(py0) - (1-px)*entropy(py1);
  185.         }
  186. }
复制代码

使用道具

7
Lisrelchen 发表于 2016-4-25 07:08:01 |只看作者 |坛友微信交流群
  1. import sys
  2. from logsum import *

  3. def main():
  4.     """
  5.     Evaluation: the Forward algorithm
  6.     """

  7.     if len(sys.argv) != 5:
  8.         print "Usage: python alpha.py <dev> <hmm-trans> <hmm-emit> <hmm-prior>"
  9.         return

  10.     input_file = open(sys.argv[1], "r")
  11.     hmm_trans_file = open(sys.argv[2], "r")
  12.     hmm_emit_file = open(sys.argv[3], "r")
  13.     hmm_prior_file = open(sys.argv[4], "r")

  14.     input_tokens = []
  15.     for line in input_file:
  16.         input_tokens += [line.split()]

  17.     hmm_trans = {}
  18.     for state1 in hmm_trans_file:
  19.         state1 = state1.split()
  20.         hmm_trans[state1[0]] = {}
  21.         for state2 in state1[1:]:
  22.             state2 = state2.split(":")
  23.             hmm_trans[state1[0]][state2[0]] = float(state2[1])

  24.     hmm_emit = {}
  25.     for state in hmm_emit_file:
  26.         state = state.split()
  27.         hmm_emit[state[0]] = {}
  28.         for word in state[1:]:
  29.             word = word.split(":")
  30.             hmm_emit[state[0]][word[0]] = float(word[1])
  31.             
  32.     hmm_prior = {}
  33.     for state in hmm_prior_file:
  34.         state = state.split()
  35.         hmm_prior[state[0]] = float(state[1])

  36.     for line in input_tokens:
  37.         probs = []
  38.         probs.append({})
  39.         for p in hmm_prior.keys():
  40.             probs[0][p] = log(hmm_prior[p]) + log(hmm_emit[p][line[0]])

  41.         for t in range(1, len(line)):
  42.             probs.append({})
  43.             for i in probs[t-1].keys():
  44.                 probs[t][i] = log(hmm_emit[i][line[t]])
  45.                 prior = 0.0
  46.                 for j in probs[t-1].keys():
  47.                     if (j == probs[t-1].keys()[0]):
  48.                         prior = probs[t-1][j] + log(hmm_trans[j][i])
  49.                     else:
  50.                         prior = log_sum(prior, probs[t-1][j] + log(hmm_trans[j][i]))
  51.                 probs[t][i] += prior

  52.         probability = probs[len(probs)-1].values()[0]
  53.         for p in probs[len(probs)-1].values()[1:]:
  54.             probability = log_sum(probability, p)

  55.         print probability
  56.         
  57. if __name__ == "__main__": main()
复制代码

使用道具

8
Lisrelchen 发表于 2016-4-25 07:11:01 |只看作者 |坛友微信交流群
  1. import java.io.*;
  2. import java.util.*;
  3. import java.util.Map.Entry;

  4. public class topwords {
  5.         public static void main(String[] args) throws Exception {
  6.                 //training
  7.                 File train = new File(args[0]);
  8.                 BufferedReader br = new BufferedReader(new FileReader(train));
  9.                 String trainFile;
  10.                 ArrayList<File> liberalBlogs = new ArrayList<File>();
  11.                 ArrayList<File> conservativeBlogs = new ArrayList<File>();
  12.                
  13.                 while ((trainFile = br.readLine()) != null) {
  14.                         if (trainFile.substring(0, 3).equals("lib")) {
  15.                                 liberalBlogs.add(new File(trainFile));
  16.                         } else {
  17.                                 conservativeBlogs.add(new File(trainFile));
  18.                         }
  19.                 }
  20.                
  21.                 br.close();
  22.                
  23.                 HashSet<String> vocabulary = new HashSet<String>();
  24.                 HashMap<String, Integer> libWords = new HashMap<String, Integer>();
  25.                 HashMap<String, Integer> conWords = new HashMap<String, Integer>();
  26.                
  27.                 int libWordNum = 0;
  28.                 int conWordNum = 0;
  29.                
  30.                 for (File l : liberalBlogs) {
  31.                        
  32.                         br = new BufferedReader(new FileReader(l));
  33.                         String line;
  34.                         while ((line = br.readLine()) != null) {
  35.                                 libWordNum++;
  36.                                 String token = line.toLowerCase();
  37.                                 if (!vocabulary.contains(token)) {
  38.                                         vocabulary.add(token);
  39.                                         libWords.put(token, 1);
  40.                                 } else {
  41.                                         libWords.put(token, libWords.get(token) + 1);
  42.                                 }
  43.                         }
  44.                         br.close();
  45.                 }
  46.                
  47.                 for (File c : conservativeBlogs) {
  48.                        
  49.                         br = new BufferedReader(new FileReader(c));
  50.                         String line;
  51.                         while ((line = br.readLine()) != null) {
  52.                                 conWordNum++;
  53.                                 String token = line.toLowerCase();
  54.                                 if (token.equals("")) {
  55.                                         System.out.println(line);
  56.                                 }
  57.                                 if (!vocabulary.contains(token)) {
  58.                                         vocabulary.add(token);
  59.                                         conWords.put(token, 1);
  60.                                 } else {
  61.                                         if (!conWords.containsKey(token)) {
  62.                                                 conWords.put(token, 1);
  63.                                         } else {
  64.                                                 conWords.put(token, conWords.get(token) + 1);
  65.                                         }
  66.                                 }
  67.                         }
  68.                         br.close();
  69.                 }
  70.                
  71.                 HashMap<String, Double[]> words = new HashMap<String, Double[]>();
  72.                 for (String word : vocabulary) {
  73.                         Double[] wordP = new Double[2];
  74.                         try {
  75.                                 wordP[0] = (libWords.get(word) + 1.0) / (libWordNum + vocabulary.size());
  76.                         } catch (Exception e) {
  77.                                 wordP[0] = 1.0 / (libWordNum + vocabulary.size());
  78.                         }
  79.                         try {
  80.                                 wordP[1] = (conWords.get(word) + 1.0) / (conWordNum + vocabulary.size());
  81.                         } catch (Exception e) {
  82.                                 wordP[1] = 1.0 / (conWordNum + vocabulary.size());
  83.                         }
  84.                         words.put(word, wordP);
  85.                 }
  86.                
  87.                 List<Entry<String, Double[]>> libList = new ArrayList<Entry<String, Double[]>>(words.entrySet());
  88.                 List<Entry<String, Double[]>> conList = new ArrayList<Entry<String, Double[]>>(words.entrySet());
  89.                 // Defined Custom Comparator here
  90.                 Collections.sort(libList, new Comparator<Map.Entry<String, Double[]>>() {
  91.                         public int compare( Map.Entry<String, Double[]> o1, Map.Entry<String, Double[]> o2 ) {
  92.                                 return (o2.getValue()[0]).compareTo(o1.getValue()[0]);
  93.                         }
  94.                 });
  95.                 Collections.sort(conList, new Comparator<Map.Entry<String, Double[]>>() {
  96.                         public int compare( Map.Entry<String, Double[]> o1, Map.Entry<String, Double[]> o2 ) {
  97.                                 return (o2.getValue()[1]).compareTo(o1.getValue()[1]);
  98.                         }
  99.                 });

  100.                 int count = 0;
  101.                 for (Map.Entry<String, Double[]> w : libList) {
  102.                         count++;
  103.                         System.out.printf("%s %.04f\n", w.getKey(), w.getValue()[0]);
  104.                         if (count == 20) {
  105.                                 break;
  106.                         }
  107.                 }
  108.                 System.out.println();
  109.                 count = 0;
  110.                 for (Map.Entry<String, Double[]> w : conList) {
  111.                         count++;
  112.                         System.out.printf("%s %.04f\n", w.getKey(), w.getValue()[1]);
  113.                         if (count == 20) {
  114.                                 break;
  115.                         }
  116.                 }
  117.         }
  118. }
复制代码

使用道具

9
Lisrelchen 发表于 2016-4-25 07:11:48 |只看作者 |坛友微信交流群
  1. import java.io.*;
  2. import java.util.*;
  3. import java.util.Map.Entry;

  4. public class topwordsLogOdds {
  5.         public static void main(String[] args) throws Exception {
  6.                 //training
  7.                 File train = new File(args[0]);
  8.                 BufferedReader br = new BufferedReader(new FileReader(train));
  9.                 String trainFile;
  10.                 ArrayList<File> liberalBlogs = new ArrayList<File>();
  11.                 ArrayList<File> conservativeBlogs = new ArrayList<File>();
  12.                
  13.                 while ((trainFile = br.readLine()) != null) {
  14.                         if (trainFile.substring(0, 3).equals("lib")) {
  15.                                 liberalBlogs.add(new File(trainFile));
  16.                         } else {
  17.                                 conservativeBlogs.add(new File(trainFile));
  18.                         }
  19.                 }
  20.                
  21.                 br.close();
  22.                
  23.                 HashSet<String> vocabulary = new HashSet<String>();
  24.                 HashMap<String, Integer> libWords = new HashMap<String, Integer>();
  25.                 HashMap<String, Integer> conWords = new HashMap<String, Integer>();
  26.                
  27.                 int libWordNum = 0;
  28.                 int conWordNum = 0;
  29.                
  30.                 for (File l : liberalBlogs) {
  31.                        
  32.                         br = new BufferedReader(new FileReader(l));
  33.                         String line;
  34.                         while ((line = br.readLine()) != null) {
  35.                                 libWordNum++;
  36.                                 String token = line.toLowerCase();
  37.                                 if (!vocabulary.contains(token)) {
  38.                                         vocabulary.add(token);
  39.                                         libWords.put(token, 1);
  40.                                 } else {
  41.                                         libWords.put(token, libWords.get(token) + 1);
  42.                                 }
  43.                         }
  44.                         br.close();
  45.                 }
  46.                
  47.                 for (File c : conservativeBlogs) {
  48.                        
  49.                         br = new BufferedReader(new FileReader(c));
  50.                         String line;
  51.                         while ((line = br.readLine()) != null) {
  52.                                 conWordNum++;
  53.                                 String token = line.toLowerCase();
  54.                                 if (token.equals("")) {
  55.                                         System.out.println(line);
  56.                                 }
  57.                                 if (!vocabulary.contains(token)) {
  58.                                         vocabulary.add(token);
  59.                                         conWords.put(token, 1);
  60.                                 } else {
  61.                                         if (!conWords.containsKey(token)) {
  62.                                                 conWords.put(token, 1);
  63.                                         } else {
  64.                                                 conWords.put(token, conWords.get(token) + 1);
  65.                                         }
  66.                                 }
  67.                         }
  68.                         br.close();
  69.                 }
  70.                
  71.                 HashMap<String, Double[]> words = new HashMap<String, Double[]>();
  72.                 for (String word : vocabulary) {
  73.                         Double[] wordP = new Double[2];
  74.                         if (libWords.containsKey(word) && conWords.containsKey(word)) {
  75.                                 wordP[0] = Math.log(((libWords.get(word) + 1.0) / (libWordNum + vocabulary.size())) / ((conWords.get(word) + 1.0) / (conWordNum + vocabulary.size())));
  76.                                 wordP[1] = Math.log(((conWords.get(word) + 1.0) / (conWordNum + vocabulary.size())) / ((libWords.get(word) + 1.0) / (libWordNum + vocabulary.size())));
  77.                         } else if (!libWords.containsKey(word) && !conWords.containsKey(word)) {
  78.                                 wordP[0] = Math.log((1.0 / (libWordNum + vocabulary.size())) / (1.0 / (conWordNum + vocabulary.size())));
  79.                                 wordP[1] = Math.log((1.0 / (conWordNum + vocabulary.size())) / (1.0 / (libWordNum + vocabulary.size())));
  80.                         } else if (!libWords.containsKey(word)) {
  81.                                 wordP[0] = Math.log((1.0 / (libWordNum + vocabulary.size())) / ((conWords.get(word) + 1.0) / (conWordNum + vocabulary.size())));
  82.                                 wordP[1] = Math.log(((conWords.get(word) + 1.0) / (conWordNum + vocabulary.size())) / (1.0 / (libWordNum + vocabulary.size())));
  83.                         } else if (!conWords.containsKey(word)) {
  84.                                 wordP[0] = Math.log(((libWords.get(word) + 1.0) / (libWordNum + vocabulary.size())) / (1.0 / (conWordNum + vocabulary.size())));
  85.                                 wordP[1] = Math.log((1.0 / (conWordNum + vocabulary.size())) / ((libWords.get(word) + 1.0) / (libWordNum + vocabulary.size())));
  86.                         }
  87.                         words.put(word, wordP);
  88.                 }
  89.                
  90.                 List<Entry<String, Double[]>> libList = new ArrayList<Entry<String, Double[]>>(words.entrySet());
  91.                 List<Entry<String, Double[]>> conList = new ArrayList<Entry<String, Double[]>>(words.entrySet());
  92.                 // Defined Custom Comparator here
  93.                 Collections.sort(libList, new Comparator<Map.Entry<String, Double[]>>() {
  94.                         public int compare( Map.Entry<String, Double[]> o1, Map.Entry<String, Double[]> o2 ) {
  95.                                 return (o2.getValue()[0]).compareTo(o1.getValue()[0]);
  96.                         }
  97.                 });
  98.                 Collections.sort(conList, new Comparator<Map.Entry<String, Double[]>>() {
  99.                         public int compare( Map.Entry<String, Double[]> o1, Map.Entry<String, Double[]> o2 ) {
  100.                                 return (o2.getValue()[1]).compareTo(o1.getValue()[1]);
  101.                         }
  102.                 });

  103.                 int count = 0;
  104.                 for (Map.Entry<String, Double[]> w : libList) {
  105.                         count++;
  106.                         System.out.printf("%s %.04f\n", w.getKey(), w.getValue()[0]);
  107.                         if (count == 20) {
  108.                                 break;
  109.                         }
  110.                 }
  111.                 System.out.println();
  112.                 count = 0;
  113.                 for (Map.Entry<String, Double[]> w : conList) {
  114.                         count++;
  115.                         System.out.printf("%s %.04f\n", w.getKey(), w.getValue()[1]);
  116.                         if (count == 20) {
  117.                                 break;
  118.                         }
  119.                 }
  120.         }
  121. }
复制代码

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-11-5 18:44