problem
可能的背景知识:python3;c++;dos&bat;World;Excel;PDF;
- 给定两个英文文档(约会大作战3PDF版&高中英语词汇Word版)
- 求两文档共同出现的单词有哪些,并翻译后输出到ans.txt文档中
solution(格式统一化)
1、对于PDF,导出得到1.txt文档。然后用文本编辑器打开把字符1234567890~!@%^&*()_+-=[]\;',./{}|:"<>?
替换为空格都。
2、对于Word,用替换通配符的方法把非字母的字符都替换为空格,然后再把所有空格都换行符,导出到文本2.txt。
(因为替换有点乱,所以很多空行)
【按照统计次频的方法,新建一个Excel;;从外部txt获取数据;;在列B自动填充全为1;;然后插入透视数据表】就得到了词频的统计同时完成了重复合并;;;另存为3.txt;;;
删掉前后空余的没用的行;;大约3500的高中词汇就呈现出来了。
codes
1、操作流程
1.新建4.txt;
2.复制1.txt到期中;
3.然后加入`gwj1314521`一行;
4.然后复制3.txt到期中;
5.然后加入'gwj233'一行;
2、新建cpp处理
#include<iostream>
#include<algorithm>
#include<string>
#include<set>
using namespace std;
const int maxn = 11000;
set<string>a,b,c;
int main(){
freopen("4.txt","r",stdin);
freopen("out.txt","w",stdout);
string t; int flag = 1;
while(cin>>t){
if(t == "gwj1314521")flag = 0;
if(flag){
a.insert(t);
}else{
b.insert(t);
}
if(t == "gwj233")break;
}
set_intersection(a.begin(), a.end(), b.begin(), b.end(), inserter(c, c.begin()));
//cout<<c.size()<<'\n';
set<string>::iterator it;
for(it = c.begin(); it != c.end(); it++){
cout<<"echo "<<(*it)<<'\n';
cout<<"(tdic "<<(*it)<<") >> ans.txt\n";
cout<<"echo . >> ans.txt"<<endl;
}
return 0;
}
3、cmd环境下运行pip install termdic
安装hzwer的终端查词(您也可以自己写,或者也可以用其他地方的API,修改上一步具体代码即可)
1.因为编码炸锅,所以安装后他的代码还要做一两处修改。
2.打开目录(这里是你termdic软件的安装目录,,,找不到的话终端运行一下报错了就位置了)C:\Development\Python36\Lib\site-packages\termdic
3.打开termdic.py。在最上面加入"import io";在main中加入"sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')"
4.保存退出
4、修改4.txt后缀为bat,点击运行即可、
因为这里只提供解决方案,所以txt的编码有待优化。
5、最后数据
高中英语课本全部的词汇量大约是3600个
约会大作战13集的词汇量大约是21000个
他们有2000个相同重合的单词
参考资料
1、统计词频率
2、py3-UnicodeEncodeError
3、github-termidic
4、批处理脚本教程
5、word通配符