鱼C论坛

 找回密码
 立即注册
查看: 840|回复: 10

[已解决]查询词的出现文本数

[复制链接]
发表于 2018-12-30 11:08:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
    您好,我有一个 九十个文本文档的语料库,想查询下 高频词汇的 出现文本数,就像图片一样C:\Users\amgalang\Desktop\无标题.png,该用什么逻辑编写 程序呢,或者麻烦大神练个手给我下 代码,感激不均。感恩。
   三个显示内容:
                        词汇    词频      出现的文本数

最佳答案
2018-12-30 16:23:01
  1. import os

  2. def print_key_dict(key_dict):
  3.     keys = key_dict.keys()
  4.     keys =sorted(keys)
  5.     for each_line in keys:
  6.         print('关键字出现在第 %s 行,第 %s 个位置。' % (each_line, str(key_dict[each_line])))


  7. def value_deal_with(each_line, key):
  8.     value = []
  9.     begin = each_line.find(key)
  10.     while begin != -1:
  11.         value.append(begin + 1)
  12.         begin = each_line.find(key, begin + 1)

  13.     return value


  14. def dict_deal_with(each_txt,key):
  15.     f = open(each_txt)
  16.     count = 0
  17.     key_dict = dict()

  18.     for each_line in f:
  19.         count += 1
  20.         if key in each_line:
  21.             value = value_deal_with(each_line,key)
  22.             key_dict[count] = value

  23.     f.close()
  24.     return key_dict


  25. def chdir_txt(key,yes_on):
  26.     txt_file_name=[]  #存放txt具体路径
  27.     txt_file = os.walk(os.getcwd())

  28.     for i in txt_file:
  29.         for file in i[2]:
  30.             if os.path.splitext(file)[1] == '.txt':
  31.                 file = os.path.join(i[0],file)
  32.                 txt_file_name.append(file)

  33.     for each_txt in txt_file_name:
  34.         key_dict = dict_deal_with(each_txt,key)
  35.         if key_dict:
  36.             print('================================================================')
  37.             print('在文件【%s】中找到关键字【%s】' % (each_txt, key))
  38.             if yes_on in ["y","Y"]:
  39.                 print_key_dict(key_dict)


  40. key = input("输入需要查询的关键字:")
  41. yes_on = input("是否打印%s位置(Y/N):"%(key))
  42. chdir_txt(key,yes_on)
复制代码


具体功能是这样的:
  1. 输入需要查询的关键字:甲鱼
  2. 是否打印甲鱼位置(Y/N):Y
  3. ================================================================
  4. 在文件【G:\OneDrive\Python3.7\学习\文件读写修改整理\girl_1.txt】中找到关键字【甲鱼】
  5. 关键字出现在第 1 行,第 [2] 个位置。
  6. ================================================================
  7. 在文件【G:\OneDrive\Python3.7\学习\文件读写修改整理\girl_2.txt】中找到关键字【甲鱼】
  8. 关键字出现在第 1 行,第 [2] 个位置。
  9. 关键字出现在第 2 行,第 [5] 个位置。
  10. ================================================================
  11. 在文件【G:\OneDrive\Python3.7\学习\文件读写修改整理\girl_3.txt】中找到关键字【甲鱼】
  12. 关键字出现在第 1 行,第 [2] 个位置。
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-30 16:23:01 | 显示全部楼层    本楼为最佳答案   
  1. import os

  2. def print_key_dict(key_dict):
  3.     keys = key_dict.keys()
  4.     keys =sorted(keys)
  5.     for each_line in keys:
  6.         print('关键字出现在第 %s 行,第 %s 个位置。' % (each_line, str(key_dict[each_line])))


  7. def value_deal_with(each_line, key):
  8.     value = []
  9.     begin = each_line.find(key)
  10.     while begin != -1:
  11.         value.append(begin + 1)
  12.         begin = each_line.find(key, begin + 1)

  13.     return value


  14. def dict_deal_with(each_txt,key):
  15.     f = open(each_txt)
  16.     count = 0
  17.     key_dict = dict()

  18.     for each_line in f:
  19.         count += 1
  20.         if key in each_line:
  21.             value = value_deal_with(each_line,key)
  22.             key_dict[count] = value

  23.     f.close()
  24.     return key_dict


  25. def chdir_txt(key,yes_on):
  26.     txt_file_name=[]  #存放txt具体路径
  27.     txt_file = os.walk(os.getcwd())

  28.     for i in txt_file:
  29.         for file in i[2]:
  30.             if os.path.splitext(file)[1] == '.txt':
  31.                 file = os.path.join(i[0],file)
  32.                 txt_file_name.append(file)

  33.     for each_txt in txt_file_name:
  34.         key_dict = dict_deal_with(each_txt,key)
  35.         if key_dict:
  36.             print('================================================================')
  37.             print('在文件【%s】中找到关键字【%s】' % (each_txt, key))
  38.             if yes_on in ["y","Y"]:
  39.                 print_key_dict(key_dict)


  40. key = input("输入需要查询的关键字:")
  41. yes_on = input("是否打印%s位置(Y/N):"%(key))
  42. chdir_txt(key,yes_on)
复制代码


具体功能是这样的:
  1. 输入需要查询的关键字:甲鱼
  2. 是否打印甲鱼位置(Y/N):Y
  3. ================================================================
  4. 在文件【G:\OneDrive\Python3.7\学习\文件读写修改整理\girl_1.txt】中找到关键字【甲鱼】
  5. 关键字出现在第 1 行,第 [2] 个位置。
  6. ================================================================
  7. 在文件【G:\OneDrive\Python3.7\学习\文件读写修改整理\girl_2.txt】中找到关键字【甲鱼】
  8. 关键字出现在第 1 行,第 [2] 个位置。
  9. 关键字出现在第 2 行,第 [5] 个位置。
  10. ================================================================
  11. 在文件【G:\OneDrive\Python3.7\学习\文件读写修改整理\girl_3.txt】中找到关键字【甲鱼】
  12. 关键字出现在第 1 行,第 [2] 个位置。
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-31 11:34:17 | 显示全部楼层
Stubborn 发表于 2018-12-30 16:23
具体功能是这样的:

  您好,真心感谢您,不过 因为我是新手,所以还想问,我的九十个文档要放在哪里呢,给代码指明路径的地方是?需要注释 希望能给到 谢谢您
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-31 16:05:54 | 显示全部楼层
本帖最后由 Stubborn 于 2018-12-31 16:06 编辑
Amgalang 发表于 2018-12-31 11:34
您好,真心感谢您,不过 因为我是新手,所以还想问,我的九十个文档要放在哪里呢,给代码指明路径的地 ...


这个是文本格式的,不知道你的只不是文本格式,其他的样式应该会有区别,你的如果也是文本的话,把代码放在当前目录就可以。和文本放一个目录,代码基本能看懂吧?需要做其他功能可以修改下,不懂联系我
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-1 10:43:21 | 显示全部楼层
Stubborn 发表于 2018-12-31 16:05
这个是文本格式的,不知道你的只不是文本格式,其他的样式应该会有区别,你的如果也是文本的话,把代码 ...

新年快乐,哈哈 谢谢您的回复,我的也是文本格式呢,就是当前的目录是在?代码有点看不懂,目录找不到,希望指明目录那一行代码,我好去把我文件放进去。还有如果可以的话 不想一个一个单词的找其出现的 文本数,想出现高频词汇 后 后边也生成 这个单词的出现文本数这样的话就更好了。麻烦啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-1 17:11:38 | 显示全部楼层
本帖最后由 Stubborn 于 2019-1-2 01:07 编辑
Amgalang 发表于 2019-1-1 10:43
新年快乐,哈哈 谢谢您的回复,我的也是文本格式呢,就是当前的目录是在?代码有点看不懂,目录找不到, ...


https://fishc.com.cn/forum.php?m ... 26798&ctid=1453   这个帖子有详细注释,不动可以看下,把代码和文件放在同一个目录下面就可以。和需要查找的文件,放一起,想统计一个一个文本出现高频词汇次数吗? 要不你传一个文本把,我看下,练手。  比如一个单词,each在这个文本出现的次数?或者是统计所有文字的单词出现的次数? 传我QQ邮箱把,有什么想需要的功能,能帮就帮: 1125359115
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-3 20:19:04 | 显示全部楼层
Stubborn 发表于 2019-1-1 17:11
https://fishc.com.cn/forum.php?mod=viewthread&tid=126798&ctid=1453   这个帖子有详细注释,不动可 ...

您好,真心感谢您,您的代码 解决了我的问题,不过来了个新的问题,
就是 现在代码跑完后 也在出现 比如,我要找到 单词 ‘SKY’代码跑完后 也出现了 'TTSky‘,或者是 ‘SKYOO',但是 我就想要 独立的’SKY' 不要某些单词中的 ,或者以它开头的,就要‘SKY'没有其他成分的,您看能实现吗?是不是要把我的文件 先都改为字符串呢?希望指点。谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-3 20:44:17 | 显示全部楼层
本帖最后由 Stubborn 于 2019-1-3 20:54 编辑
Amgalang 发表于 2019-1-3 20:19
您好,真心感谢您,您的代码 解决了我的问题,不过来了个新的问题,
就是 现在代码跑完后 也在出现 比如 ...


发个文本给我参考下,我看下。需要用到正则表达式。或者你看的动下面的代码,可以借鉴,自己学习,修改下。下面代码是统计文本出现频率最高的前10个单词
  1. import re
  2. file_object = open("text.txt")   #打开目录
  3. text=file_object.read()
  4. txt_dict={}#用于统计 txt:个数
  5. txt_list=[]#用于存放所有单词
  6. for letter in text:
  7.     if not letter.isalpha():
  8.         text = text.replace(letter,'-')
  9. txt_list = text.lower().split('-') #分隔单词
  10. txtlist = list(filter(lambda x : x != '',txt_list))#去掉空串
  11. #print('单词列表:',txtlist)
  12. #正则表达式分隔
  13. specila_set = set()
  14. for letter in text:
  15.     if not letter.isalpha():
  16.         specila_set.add(letter)
  17. #print('所有不是字母的字符:',specila_set)
  18. pattern = ''.join(specila_set)
  19. pattern = '['+pattern+']'
  20. word_list = re.split(pattern,text.lower()) #还要去除空格
  21. # 遍历字符串,获取每个word追加到wordlist
  22. word =''
  23. word_list2 = []
  24. for letter in text.lower():
  25.     if letter.isalpha(): #如果是字母,追加到word
  26.         word += letter
  27.     else:
  28.         if word != '':
  29.             word_list2.append(word) #不是字母,word不为空的话追加wordlist
  30.             word = '' # word置空
  31. #print(word_list2)
  32. # 正则表达式匹配单词
  33. pattern = r'[a-zA-Z]+'
  34. word_list3 = re.findall(pattern,text.lower())
  35. #print(word_list3)
  36. #统计
  37. for word in set(txt_list):
  38.     txt_dict[word] = txt_list.count(word) #key=单词,value=单词在list里的count
  39. print(sorted(txt_dict.items(),key = lambda x:x[1],reverse=True)[0:11]) #dict根据value倒序,取前11个,含有空格,多取一个
  40. #[('', 273), ('i', 44), ('the', 43), ('and', 37), ('of', 36), ('a', 33), ('to', 28), ('was', 26), ('had', 22), ('my', 20), ('as', 17)]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-3 23:01:57 | 显示全部楼层
Stubborn 发表于 2019-1-3 20:44
发个文本给我参考下,我看下。需要用到正则表达式。或者你看的动下面的代码,可以借鉴,自己学习,修改 ...

您好,给您发了“代码求助”的qq邮箱,您看下,谢谢。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-4 07:32:31 | 显示全部楼层
本帖最后由 Stubborn 于 2019-1-4 07:38 编辑
  1. import os
  2. import collections

  3. def search_files(key, detail):
  4.     all_files = os.walk(os.getcwd())
  5.     txt_files = []   #用来存放txt路径

  6.     for root,dirs,files in all_files:
  7.         for each_file in files:
  8.             if os.path.splitext(each_file)[1] == '.txt':
  9.                 each_file = os.path.join(root, each_file)
  10.                 txt_files.append(each_file)
  11.     for each_txt_file in txt_files:
  12.         with open(each_txt_file) as file1:
  13.             str = file1.read().split("\n")
  14.             print(each_txt_file)
  15.             print("所查询的%s单词出现的次数%s:" % (key, collections.Counter(str)[key]))

  16. key = input('请将该脚本放于待查找的文件夹内,请输入关键字:')
  17. detail = input('请问是否需要打印关键字【%s】在文件中的具体位置(YES/NO):' % key)
  18. search_files(key, detail)
复制代码


请将该脚本放于待查找的文件夹内,请输入关键字:MINU
请问是否需要打印关键字【MINU】在文件中的具体位置(YES/NO):YES
E:\OneDrive\Python3.7\近期作业\统计\1.txt

所查询的MINU单词出现的次数14:

E:\OneDrive\Python3.7\近期作业\统计\2.txt

所查询的MINU单词出现的次数3:

E:\OneDrive\Python3.7\近期作业\统计\3.txt

所查询的MINU单词出现的次数3:

E:\OneDrive\Python3.7\近期作业\统计\4.txt

所查询的MINU单词出现的次数0:

E:\OneDrive\Python3.7\近期作业\统计\5.txt

所查询的MINU单词出现的次数9:

E:\OneDrive\Python3.7\近期作业\统计\6.txt

所查询的MINU单词出现的次数5:

E:\OneDrive\Python3.7\近期作业\统计\7.txt

所查询的MINU单词出现的次数0:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-28 11:29:39 | 显示全部楼层
Stubborn 发表于 2019-1-4 07:32
请将该脚本放于待查找的文件夹内,请输入关键字:MINU
请问是否需要打印关键字【MINU】在文件中的具体 ...

您好,还记得我吗,哈哈哈。碰到了个问题,请教下,希望指点
     您给的代码运行后能找到单个单词的在多个文件当中,具体哪几个文件出现和出现的次数。
然而我想得到代码一运行,多个单词,在多个文件当中,每个单词的出现次数(不需要定位)。能解决吗?真心谢谢。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-15 09:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表