基于线性表和二叉排序树的低频词过滤系统

该博客介绍了如何使用线性表和二叉排序树实现低频词过滤系统,通过统计英文文章中单词的频率,删除出现次数低于五次的单词。并比较了两种方法的效率,提供了主界面代码、树结构实现和运行结果,展示了不同方法的运行时间和平均查找时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于线性表和二叉排序树的低频词过滤系统

(一)实验内容

  1. 对于一篇给定的英文文章,分别利用线性表和二叉排序树来实现单词频率的统计,实现低频词的过滤,并比较两种方法的效率。具体要求如下:

  2. 读取英文文章文件(Infile.txt),识别其中的单词。

  3. 分别利用线性表和二叉排序树构建单词的存储结构。当识别出一个单词后,若线性表或者二叉排序树中没有该单词,则在适当的位置上添加该单词;若该单词已经被识别,则增加其出现的频率。

  4. 统计结束后,删除出现频率低于五次的单词,并显示该单词和其出现频率。

  5. 其余单词及其出现频率按照从高到低的次序输出到文件中(Outfile.txt),同时输出用两种方法完成该工作所用的时间。

  6. 计算查找表的ASL值,分析比较两种方法的效率。

(二)相关算法及其实现

1、主界面代码部分

此函数主要就是使用print打印出主界面

def menu():
    print("------------------------")
    print("1.线性表")
    print("2.二叉排序树")
    print("3.退出系统")
    print("------------------------")

2、利用线性表来实现单词频率的统计

def linear():
    showfile_info = open('Infile.txt', 'r')
    line_info = showfile_info.read()
    # 去掉文本中的标点符号
    line_info = line_info.replace('.', '')
    line_info = line_info.replace(',', '')
    line_info = line_info.replace('!', '')
    line_info = line_info.replace('"', '')
    line_info = line_info.replace(':', '')

    wordlist = line_info.split()
    wordfreq = []
    for w in wordlist:
        wordfreq.append(wordlist.count(w))  # 记录单词出现的频率
    dit = dict(zip(wordlist, wordfreq))
    # 将字典的key转换成列表
    key_lst = list(dit)
    length = len(key_lst)
    new_lst = []  # 创建新的列表用来存储出现频率大于5次的单词
    for i in range(0, length):
        if int(dit[key_lst[i]]) > 5:
            new_lst.append(key_lst[i])
    new_length = len(new_lst)
    start = time.perf_counter()  # 起始时间
    for i in range(new_length - 1):   # 选择排序
        max_index = i
        for j in range(i + 1, new_length):
            if dit[new_lst[max_index]] < dit[new_lst[j]]:
                max_index= j
        if i != max_index:
            temp=new_lst[i]
            new_lst[i] = new_lst[max_index]
            new_lst[max_index]=temp
    for i in range(0,new_length):
        print(new_lst[i],end=':')
        print(dit[new_lst[i]])
        infile_info = open('Outfile.txt', 'a')  # 以追加的方式向文件中写入数据,如果文件不存在就创建一个文件
        infile_info.write(str(new_lst[i])+':'+str(dit[new_lst[i]])+'\n')
    end 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值