文本文件单词的检索与计数

文本文件单词的检索与计数

在这里插入图片描述

算法

朴素模式匹配算法
Brute-Force的基本思想是:从主串S=“S(0) S1 …S(n-1)”的第pos个字符开始与子串T=“T(0) T1 …T(n-1)”的第一个字符比较,如果相等则继续比较后一个字符;否则从主串的下一字符开始与子串T的第一个字符重新开始比较,以此类推。如果在主串S中存在与子串T相等的连续字符序列,则匹配成功,函数返回子串T中第一个字符在主串S中的位置;否则,函数返回-1。简单的说,就是对主串的每一个字符作为子串的开头,与要匹配的字符串进行匹配。对主串做大循环,每个字符开头做T的长度的小循环,直到匹配成功或全部遍历完成为止。

def word_search(self):
        filename, word = self.get_target()
        file = self.open_file(filename, 'r')
        row = 1
        S=file.readline()
        while True:
            if S:
                index_list = []
                num=0#一行出现了几次
                i = 0
                index = None
                is_exists = False#是否存在
                while i<len(S):
                    if word == S[i:i+len(word)]:
                        is_exists = True
                        index = i+1
                        index_list.append(index)
                        i+=1
                        num+=1     
                    else:
                        i = i+1
                S=file.readline()
                print('在第'+str(row)+'行出现了'+str(num)+'次'+' '+'相应位置在',end='')
                for index in index_list:
                    print(str(index)+' ', end='')
                print('')
                row+=1
            else:
                break

KMP算法
Knuth-Morris-Pratt字符串查找算法(简称为KMP算法)可在一个主文本字符串S内查找一个词W的出现位置。此算法通过运用对这个词在不匹配时本身就包含足够的信息来确定下一个匹配将在哪里开始的发现,从而避免重新检查先前匹配的字符。

在python中可以实验line,count()方法来对字符串进行检索与计数

运行环境

visual studio code

运行截图

建立文件,并输入数据量大的文本
在这里插入图片描述在这里插入图片描述
单词计数,计数目标单词一共出现的次数

在这里插入图片描述
单词的定位
在这里插入图片描述

附属全代码(稍微有点小问题,还在调试当中)

class Word_Search():
    def menu(self):
        print('文本文件单词的检索与计数')
        print('1. 建立文件')
        print('2. 单词计数')
        print('3. 单词定位')
        print('4. 退出程序')
        print('请选择:')
        choice = input()
        if choice == '1':
            self.create_file()
        elif choice == '2':
            self.word_count()
        elif choice == '3':
            self.word_search()
        else:
            print('欢迎下次使用!')
            return

    def show_menu(self):
        choice = input('是否返回主菜单:(Y/N)')
        if choice == 'Y':
            self.menu()
        else:
            print('欢迎下次使用!')
            return
                
    def open_file(self, filename, method):
        try:
            file = open('/Users/Desktop' + filename + '.txt', method)#桌面所在位置
        except IOError:
            print('没有找到文件,请重新输入!')
            self.show_menu()
        else:
            return file

    def get_target(self):
        filename = input('请输入文件名:')
        word = input('请输入目标单词:')
        return filename, word

    def create_file(self):
        filename = input('请输入文件名:')
        file = self.open_file(filename, 'w')
        print('请输入文件内容:')
        while True:
            line = input()
            if line == '#':
                break
            else:
                file.writelines(line)
                file.write('\n')
        file.close()
        self.show_menu()

    def word_count(self):
        filename, word = self.get_target()
        file = self.open_file(filename, 'r')
        count = 0
        try:
            for line in file.readlines():
                count += line.count(word)
            print('共有 ' + str(count) + ' 个 ' + word)
            self.show_menu()
        except:
            pass

    def word_search(self):
        filename, word = self.get_target()
        file = self.open_file(filename, 'r')
        row = 1
        S=file.readline()
        while True:
            if S:
                index_list = []
                num=0#一行出现了几次
                i = 0
                index = None
                is_exists = False#是否存在
                while i<len(S):
                    if word == S[i:i+len(word)]:
                        is_exists = True
                        index = i+1
                        index_list.append(index)
                        i+=1
                        num+=1     
                    else:
                        i = i+1
                S=file.readline()
                print('在第'+str(row)+'行出现了'+str(num)+'次'+' '+'相应位置在',end='')
                for index in index_list:
                    print(str(index)+' ', end='')
                print('')
                row+=1
            else:
                break
                
            
wordsearch = Word_Search()
wordsearch.menu()








  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值