首先,是关键词的选取:
好吧这个我这模型实在是太简单了,但还是讲一讲比较好呢。。。
我们现在手头有的是一堆百度百科词条w的DF(w, c)值,c是整个百科词条。。。原因是。。。方便嘛~(而且人家现成的只有介个了啦~)
我们发现有830W+的词条数目,都存下来显然是不理智、不科学、不魔法的。所以选取一部分作为关键词。
如何选取关键词呢?我选择了DF值在[100, 5000]之间的词。虽然也很不理智、不科学、不魔法,但是比直接存下来理智、科学、魔法多了,恩!
于是就全读进来,然后找到需要的词语,顺便计算下IDF值什么的输出到新的文件里去。
 
 1 #include <cstdio>
 2 #include <iostream>
 3 #include <iomanip>
 4 #include <cmath>
 5 #include <string>
 6 #include <algorithm>
 7 
 8 using namespace std;
 9 typedef double lf;
10 const int cnt_id = 9000005;
11 const lf tot_file = 4500000;
12 const lf eps = 1e-8;
13 
14 struct data {
15     int id;
16     lf IDF;
17     string st;
18     
19     data() {}
20     data(int _id, lf _IDF, string _st) : id(_id), IDF(_IDF), st(_st) {}
21     
22     inline bool operator < (const data &a) const {
23         return IDF > a.IDF;
24     }
25 } a[cnt_id];
26 inline bool cmp_id(data a, data b) {
27     return a.id < b.id;
28 }
29 
30 
31 string st;
32 int id, cnt;
33 int St, Ed;
34 lf NUM_max, NUM_min;
35 
36 inline lf calc(int x) {
37     return (lf) log((lf) tot_file / (x + eps));
38 }
39 
40 int main() {
41     int i, DF;
42     freopen("data", "r", stdin);
43     freopen("data_new", "w", stdout);
44     ios::sync_with_stdio(true);
45     while (cin >> id >> st >> DF)
46         a[++cnt] = data(id, (lf) calc(DF), st);
47     sort(a + 1, a + cnt + 1);
48     
49     NUM_max = calc(100), NUM_min = calc(5000);
50     for (i = 1; i <= cnt; ++i)
51         if (a[i].IDF < NUM_max) break;
52     St = i;
53     for ( ; i <= cnt; ++i)
54         if (a[i].IDF < NUM_min) break;
55     Ed = i;
56     
57     sort(a + St, a + Ed, cmp_id);
58     cout << Ed - St << endl;
59     for (i = St; i < Ed; ++i)
60         cout << a[i].id << ' ' << a[i].st << ' ' << setprecision(10) << a[i].IDF << endl;
61     return 0;
62 }
View Code

 这样子我们就选出来了339,896个数作为关键词,占全部词条的4.1%,数量的减少,可以大幅之后的程序提高效率。

相关文章:

  • 2021-11-18
  • 2021-09-08
  • 2021-12-29
  • 2022-03-15
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-02-20
  • 2022-12-23
  • 2022-12-23
  • 2022-01-22
  • 2021-06-13
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案