回 帖 发 新 帖 刷新版面

主题:统计  词频统计

各位大下  救我 遇到一个棘手问题(对我来说)  题目是这样的


编程统计一篇英语文章中不同介词出现的频率(介词长度*出现次数/全文长度)。

要求

(1)       英语文章由用户指定路径名来确定。

(2)       介词由用户任意指定n个。

(3)       用频率直方图来表示统计结果。

回复列表 (共5个回复)

沙发

介词好象有很多哇~ 用一些常用的还可以吧.比如in on at,用状态机找匹配.
设状态i=o=a=1,(i)n=2,(o)n=3,(a)t=4;

int state = 1;
switch (state) {
    case 1: 
    switch (c) {
        case 'i': state = 2;
        case 'o': state = 3;
        case 'a': state = 4;
        break; 
        default: state = -1; //表示失败
    } 
    break;
    case 2:
    switch (c) {
        case 'n': state = 0; //表示成功匹配一个介词
        default: state = -1;
    }
    break;
    case 3:
    switch (c) {
        case 'n': state = 0; //表示成功匹配一个介词
        default: state = -1;
    }
    break;
    case 4:
    switch (c) {
        case 't': state = 0; //表示成功匹配一个介词
        default: state = -1;
    }
    break;
}

我也没实践过,但感觉状态机就是这样.

板凳

首先多谢大下热情恢复  但是我想你说的和题目有些背离啊  我想应该思想是
  统计词频  首先得作一个介词库  (包含这篇文章中的的就行了)然后 再指定的文章中搜索  与词库中有相同的旧累计  哦   你认为这要用数据结构中的那种结构最好呢

3 楼

呵呵,不理解就算了. 按你的想法呢,就是从文件读一个单词,然后搜索介词库看看有没有合适单词,如果有只要把长度加到pps(记录介词总长)上. 读完所有单词就用pps/sum(文章总长度)就行了.不用你那个公式.

4 楼

是这样啊那谢谢了

5 楼

1楼的方法可以用一个多叉树来实现,做好了查询起来很方便的,更重要的是时间空间都很节省,还有一种思路就是做一个词库类(最好可以添加进取词汇)这样,每次从文本里读到的词汇,都在词汇库里查询一次。这样弄也可以得,我用C++ 做好了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册