通用技术 笔试题

cookie · 2018年12月27日 · 最后由 羽寰 回复于 2019年05月30日 · 2805 次阅读

笔试题描述:
有个 xxx.csv 文件,统计出现 “今天”、“天气”、“真赞” 的次数,并排序输出。
我的思路:
1、使用文件输入输出流按字节读取文件,设置编码为 UTF-8(防止文件过大或者读取后是乱码);
2、前一个字符串和后一个字符串的首字符拼接,作为统计对象,进行遍历(防止出现前一个字符串是 “今”,后一个字段串首字符是 “天”);
3、统计一个字符串出现的次数:把原字符 s 进行替换,s.replace("今天",“”),比较替换后字符串长度,出现次数为(s.length-s1.length)/2;
4、排序嘛方法比较多,不是重点。

大家有没有其他思路?

最佳回复

了解一下 treeMap,直接就是排序的。
这道题应该直接就很暴力就行了,得到 csv 方格中的内容后,就使用正则表达式匹配统计数量。
原因是 3 个统计词循环次数很少。
注意的是 csv 文件的编码格式要和统计计算使用的编码格式相同。

读取 CSV 文件,甚至可以直接用读文本那种一行一行读就可以了,不用考虑方格格式。

这道题可能是要问你对分词的理解(solr,lucence)。
不过以你现在所述,还用不上分词。

共收到 8 条回复 时间 点赞

csv 文件内容的格式是啥啊,是一个个单独的词还是句子?这个得说清楚。

先把文件内容读到内存中

声明一个 hashmap
{"1":"今天","2":"天气","3":"真赞"}
前面的 key 用来做排序
后面的 value 做替换 怎么样

全部在
foreach
里面完成

了解一下 treeMap,直接就是排序的。
这道题应该直接就很暴力就行了,得到 csv 方格中的内容后,就使用正则表达式匹配统计数量。
原因是 3 个统计词循环次数很少。
注意的是 csv 文件的编码格式要和统计计算使用的编码格式相同。

读取 CSV 文件,甚至可以直接用读文本那种一行一行读就可以了,不用考虑方格格式。

这道题可能是要问你对分词的理解(solr,lucence)。
不过以你现在所述,还用不上分词。

闲着做了下,代码奉上,没有多想。

#coding=utf-8

import re

str1=open('./xxx.csv',encoding='utf-8').read()  #读出文件

reword={'今天','天气','真赞'}  #列出要匹配文字
setreword={}            #初始化计数统计字典
for word in reword:     #基数统计
    count=0
    for i in re.finditer(word,str1): #全文匹配计数
        count=count+1
    setreword[word]=count    #设置字典
serewordorder=sorted(setreword.items(),key=lambda x:x[1])   #字典排序
print(setreword)  #打印结果

str1.close()
zyanycall 回复

经你提醒,这不就是 lucence 索引里面分词后的倒排表嘛,不同的是,题目不需要词出现的索引位置

肖军 回复

代码写的不错,很简洁。

代码里 strl 应该没有 close 的属性吧

代码还得调试 返回都为 0

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册