精华内容
下载资源
问答
  • 统计单词前缀

    2015-05-17 22:49:27
    通过构建字典树,来统计以单词,比如“ab”为前缀的单词的个数
  • } 输出: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 输入大写字母,输出大小写字母及其对应的ASCII码(C) 使用%c输出的是字符本身 使用%d输出的是字符对应的ASCII 在ASCII中,小写英文字符 = 大写英文...

    养成好习惯,点个赞 再走;有问题,欢迎私信、评论,我看到都会回复的

    以下题目是对于ASCII码的一些练手题

    在c语言中

    1. 使用%c输出的是字符本身
    2. 使用%d输出的是字符对应的ASCII
    3. 在ASCII中,小写英文字符 = 大写英文字符+32
    4. 还有注意区分单引号''和双引号""的区别
      单引号:字符,是可以进行加减的
      双引号:字符串

    抛砖引玉,先看一下这两个小题目:

    • 将China加密
      单引号:字符
      字符进行加减时,内部进行了数学运算(先转化为ASCII码,进行加减后,根据输出格式%c再转化为字符)
    #include<stdio.h>
    int main()
    {
    	char C,h,i,n,a;
    	printf("%c%c%c%c%c",'C'+4,'h'+4,'i'+4,'n'+4,'a'+4);
    	return 0; 
    }
    

    输出:

    Glmre
    
    • 按顺序打印26个大写英文字母
      配合使用输出格式%c和单引号''
    #include<stdio.h>
    int main()
    {
    	char i; 
    	for(i = 'A'; i <= 'Z'; i++){
    		printf("%c ", i);
    	}
    	return 0;
     } 
    

    输出:

    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
    

    输入大写字母,输出大小写字母及其对应的ASCII码(C)

    1. 使用%c输出的是字符本身
    2. 使用%d输出的是字符对应的ASCII
    3. 在ASCII中,小写英文字符 = 大写英文字符 + 32

    使用scanf()输入

    #include<stdio.h>
    int main()
    {    
    	char a, b;
    	
    	//输入一个大写字母
    	scanf("%c", &a);
    	
    	printf("%c  %d\n", a, a);
    	b = a + 32;
    	printf("%c  %d", b, b);
    	return 0;
    }
    

    输入:Z
    输出:

    Z  90
    z  122
    

    使用getchar()输入

    #include<stdio.h>
    int main(){
    	//请输入一个大写字母
    	char a = getchar();
    	
    	printf("%c  %d\n", a, a);
    	printf("%c  %d", a + 32, a + 32);
    
    	return 0;
    }
    

    输入:A
    输出:

    A  65
    a  97
    

    再对上面这个题目进行扩展:

    输入语句,将大写字母变成小写字母(C)

    • 这个题目,要求输入的是语句,用好getchar()函数即可
    #include<stdio.h>
    int main()
    {
    	int i = 0;
    	char a[80];
    	
    	//输入一串字符串,回车时输入停止
    	while((a[i] = getchar()) != '\n'){
    		i++}
    	
    	a[i] = '\0';//这只是人为加的结束标志
    	
    	for(i = 0; a[i] != '\0'; i++){
    		if(a[i] >= 'A' && a[i] <= 'Z') a[i] += 32;
    		putchar(a[i]);
    	}
    	return 0;
     } 
    

    输入:THIS is a Good Day
    输出:

    this is a good day
    

    输入一个句子,将句子中每个单词的第一个字母转换为大写字母(C)

    • 这个题目,我用指针玩的
    #include<stdio.h>
    void main()
    {
    	char change(char*);
    	char ch, a[80];
    	int i = 0;
    	
    	//输入一个字符串(以.结束)
    	while((ch = getchar()) != '.') a[i++] = ch;
    	
    	a[i] = '\0';//添加结束标志
    	
    	change(a);
    	puts(a);
    	return 0;
     } 
     
    char change(char*p){
     	if(*p >= 'a' && *p <= 'z')*p -= 32;
     	while(*p != '\0'){
     		if((*p == ' ') && (*(p+1) >= 'a') && (*(p+1) <= 'z')){
     			*(p+1) -= 32;
     		} 
     		p++;
    	 }	
    }
    

    输入:this is a good day.
    输出:

    This Is A Good Day
    

    提高:

    输入一串字符,分别算出英文字母、空格、数字、其他字符的个数(C)

    #include<stdio.h>
    int main()
    {
    	int i = 0;
    	//英文字母、空格、数字、其他字符 
    	int letter = 0, space = 0, digit = 0, others = 0;
    	char a[80];
    	
    	//输入一串字符(以.结束)
    	while((a[i] = getchar()) != '.') i++;
    	
    	a[i] = '\0';
    	
    	for(i = 0; a[i] != '\0'; i++){
    		if((a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z')) letter++;
    		else if(a[i] == ' ') space++;
    		else if(a[i] >= '0' && a[i] <= '9') digit++;
    		else others++;
    	}
    	printf("letter = %d\nspace = %d\ndigit = %d\nothers = %d\n", letter, space, digit, others);
    	return 0;
    }
    

    输入:zhang guo hao 666 ~~~.
    输出:

    letter = 11
    space = 4
    digit = 3
    others = 3
    

    C语言入门题目文章导航:

    1. 素数(C)
    2. 水仙花数(C)
    3. 斐波那契数列(C)
    4. 完数(C)
    5. 阶乘(C)
    6. 直角杨辉三角形(C)
    7. 本篇文章
    8. 输入一个字符,找出他的前驱字符和后继字符(C)
    9. 最大数、最小数(C)
    10. 百钱买百鸡(C语言,枚举法)
    11. 辗转相除法求最大公约数,利用最大公约数求最小公倍数(C)
    12. 输入一个年份和一个月份,输出该年此月天数;知道日期,计算该日是本年的第几天(C)
    13. 输入一个不多于4位的正整数,求它的位数,并按逆序输出各位数字(C)
    14. 利用二维数组求方阵的主次对角线之和(C)
    15. 在一个二维数组中找出最小数及其所在的行和列(C)
    16. 找出一个二维数组中的鞍点(C)
    17. 删除指定字符串的指定字符(C)
    18. 字符串(C)
    19. 条件判断语句1(C)
    20. 条件判断语句2(C)
    21. 圆、三角形、正方形、长方体、计算1到100的和、和差积商、平均值
    22. 输入三个整数,要求程序把数据按从小到大的顺序放入x y z中,然后输出(C)
    23. 18个数围成一圈,求相邻三数之和最大数(C)
    24. 梯形法求定积分(C)
    25. 学生与课程的综合问题(C)
    展开全文
  • 这个单词 这个单词是一个产生大量单词的游戏。 这些单词缺少 x 个字母,您必须在 10-20 秒内猜出单词
  • 为了背单词,我花了两天写了一款背单词小程序

    千次阅读 多人点赞 2020-05-23 15:52:51
    前言     ...考试之前看啥单词都会,一上考场:这单词啥意思?         前两个月又开始了痛苦的英语学习。起步:背单词。开始还是按照以前的方

    前言

           “要是考试不考英语就好了”
            哎,提起英语,都是伤心事。有时候严重怀疑自己不是一块学习英语的料。单词背了忘,忘了背,背了又忘。考试之前看啥单词都会,一上考场:这单词啥意思?
            前两个月又开始了痛苦的英语学习。起步:背单词。开始还是按照以前的方法,每天规定背多少个单元,以此类推…当背完之后,测试自己的单词数。懵了,明明背过的单词,依然记不住…
            总结失败经验,百度:为什么单词记不牢?发现:艾宾浩斯遗忘曲线[了解一点,没有实践过]。为了验证艾宾浩斯遗忘曲线是否有效,海轰按照遗忘表格背了一个月单词[中间有几天没有坚持住]点开测试网站,哈哈,单词量居然还真的提高了[具体提高多少就不说了,不然就可以猜出一共会多少个词了]
            至今也用过几款单词APP,很好,但是感觉不适合自己。
            不如,给自己写个吧o( ̄︶ ̄)o    希望实现的功能如下:

    • 利用艾宾浩斯遗忘曲线记忆单词,统计每个单词自己错误的次数,便于复习
    • 界面尽量简单,好操作一点
    • 背诵一遍单词后,需要对之前的单词进行复习

    程序截图

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    过程

    1、确定数据结构

    • 首先,需要一个集合记录单词,组成词库,一个集合记录用户的个人信息、背诵情况,便于之后数据分析。

    2、确定功能

    • 明确小程序应该具备的一些功能:背诵单词、复习、单词分析…起初开发一个测试版本,用于验证基础功能是否可以实现,然后在后续的版本慢慢更新新功能。
    • 作为第一个版本,验证基础功能: 读取艾宾浩斯遗忘表格,确定当天需要新学、复习的单词章节
    • 对于在背诵单词过程中,不认识的单词需要进行复习,一直到了解其意思为止//利用while循环
    • 统计单词信息:每个单词错误次数、当天背诵单词数量、单词章节//为后续版本作基础

    3、具体思路
            对于艾宾浩斯遗忘表格,开始想的办法是将其存为一张二维表。首次加载界面时,获取当前日期,与数据库用户日期进行作差,计算出当天应该背诵复习的章节。之后不知道咋了,一直报错,不知道哪里出了问题。后面只好采用了比较笨的一种方法:一维数组存储。部分代码如下:

      form_18: [3,11,14,16,17,18],
        form_19: [4,12,15,17,18,19],
        form_20: [5,13,16,18,19,20],
        form_21: [6,14,17,19,20,21],
        form_22: [7,15,18,20,21,22],
        form_23: [8,16,19,21,22,23],
        form_24: [9,17,20,22,23,24],
    

            如何背诵单词呢?这里海轰采用的方法是:根据计算出的章节数组,依次获取对应章节里面的单词,然后再依次循环显示在界面上。背诵单词,首先界面只会显示一个单词,用户需要根据自己是否认识其含义,选择"不认识"or"认识"。选择"不认识",显示其含义,并将其单词信息加入复习队列,错误次数+1;选择"认识",则读写下一个单词。在学习完今日的单词之后,再开始对不认识的单词进行重温,必须将单词意思全部了解方可结束。只有不认识,则一直循环,直到认识为止。//是不是有点狠

    fontFamily: 'HaihongPro',//字体名字
        loaded: false,//判断字体加载是否完成
        first_words:1,//递增 用于翻转数组
        words:"",//一章节的单词
        words_length:0,//一章节单词的个数
        word:"",//当前单词
        isshowexplain:false,//是否展现单词意思 默认:false
        id_word:0,//一个章节中单词的位置 第几个 初始:0
        id_day_length:0,//背诵表数组的长度
        id_day: "",//背诵表数组
        review_words:[],//不认识的单词
        isreview:false,//是复习单词吗 默认:不是
        ishaveload_reviewwords:false,//是否已经加载不认识的单词
        isknow:true,// 复习模式 判断是认识的next 还是不认识的next 默认:true
        isrv:false,
        isexist:false,//是否含有用户
        openid:"",//用户openid
        today_wordnums:0,//今日背诵单词数量
        review_wordnums:0,//今日复习单词数量
        today_chapter:1,//今日单词章节
        result:false,
    

             从思路上看,难度不大。开始的时候海轰也是这样认为的。然而,真正自己开发的时候,完了,太难了。其他不论是"认识"/“下一个”,方法都是一样的,难就难在如何在一个方法中区分不同的情况。比如,认识有新学时候的认识,也有复习时候的认识。逻辑性比较强,这里花费的时间最多!部分demo代码如下:

    // 下一个单词
      nextword:function(){
        wx.vibrateShort({})
        var k=this
        // 背诵新单词+复习前几天的单词
        if(k.data.isreview==false)
        {
          // 没有背完一个章节
          if (k.data.id_word < k.data.words_length - 1) {
            k.setData({
              id_word: k.data.id_word + 1,
              word: k.data.words[k.data.id_word + 1],
              isshowexplain: false,
            })
          }
          // 背完了该章节
          else {
            // 所有章节都背完了
            if (k.data.first_words == k.data.id_day_length+2) {
              console.log("所有章节背完")
              wx.showToast({
                title: '背完啦\(^o^)/~',
                icon: "none",
                mask:true
              })
              // 当今天新单词背诵完毕 立刻复习今天的单词
              k.setData({
                isshowexplain:false,
                isreview:true,
                isrv:true,       
              })
            }
            // 获取下一章节 单词
            else {
              wx.showLoading({
                title: '下一章节',
                mask: true
              })
              console.log("本章节背完了,背下一个章节了")
              // 获取下个一个背诵章节的单词
          
              db.collection('words').where({
                chapter: parseInt(k.data.id_day[k.data.id_day_length - k.data.first_words])
              }).get().then(res => {
                console.log(res.data[0])//这一天第一个需要背诵的章节
                wx.hideLoading()
                k.setData({
                  words: res.data[0].words,//第一章节的所有单词
                  words_length: res.data[0].words.length,//第一章节单词数量
                  word: res.data[0].words[0],//第一章节第一个单词
                  first_words: k.data.first_words + 2,
                  id_word: 0,//
                  isshowexplain: false,
                  review_wordnums: k.data.review_wordnums + res.data[0].words.length
                })
              }).catch(err => {
                wx.showToast({
                  title: '出错啦',
                  icon: "none",
                  mask: true
                })
              })
            }
    
          }
        }
        // 复习今天背诵的单词
        else
        {
          // 不需要复习
          if(k.data.review_words.length==0)
          {
            wx.showLoading({
              title: '\(^o^)/~',
            })
            var time = util.formatTime(new Date())
            // 如果记录中存在该用户
            console.log(k.data.isexist)
            if (k.data.isexist==="true")
            {
              console.log("更新数据x")
              console.log(time)
              console.log(k.data.today_chapter)
              console.log(k.data.today_wordnums)
              console.log(k.data.openid)
    
              // 调用云函数 积分减一
              wx.cloud.callFunction({
                // 要调用的云函数名称
                name: 'HHPro_functions',
                // 传递给云函数的event参数
                data: {
                  function_name: "update_words",
                  openid: k.data.openid,
                  last_time: time,
                  today_chapter: k.data.today_chapter,//今日章节
                  words_nums:k.data.today_wordnums,//已经背诵单词总数
                }
              }).then(res => {
                console.log("更新数据")
                k.setData({
                  result:true
                })
                wx.hideLoading()
              }).catch(err => {
                console.log(err)
              })
            }
            // 不存在
            else
            {
              db.collection('study_user').add({
                // data 字段表示需新增的 JSON 数据
                data: {
                 study_openid:k.data.openid,//用户id
                 first_time:time,//第一次背诵单词的时间
                 last_time:time,//最后一次背诵的时间
                 words_nums:k.data.today_wordnums,//已经背诵单词总数
                 today_chapter:k.data.today_chapter,//今日章节
                 days:1,//累积天数
                }
              })
                .then(res => {
                  console.log(res)
                  k.setData({
                    result: true
                  })
                  wx.hideLoading()
                })
                .catch(console.error)
            }
    
          }
          else
          {
            // 加载需要复习的单词
            if (k.data.ishaveload_reviewwords == false) {
              k.setData({
                words: k.data.review_words,//今天不认识单词集合
                words_length: k.data.review_words.length,//第一章节单词数量
                word: k.data.review_words[0],//第一章节第一个单词
                id_word: 0,//
                isshowexplain: false,
                ishaveload_reviewwords: true,
                isrv: false,
              })
            }
            // 实现 复习单词中的 下一个 功能
            else {
              console.log(k.data.id_word)
              console.log(k.data.review_words.length)
              console.log(k.data.review_words)
    
              if (k.data.review_words.length == 1 || k.data.review_words.length == 0) {
                console.log("复习完成")
                wx.showLoading({
                  title: '复习完成\(^o^)/~',
                })
                var time = util.formatTime(new Date())
                // 如果记录中存在该用户
                if (k.data.isexist === "true")
           {
                
                  // 调用云函数 积分减一
                  wx.cloud.callFunction({
                    // 要调用的云函数名称
                    name: 'HHPro_functions',
                    // 传递给云函数的event参数
                    data: {
                      function_name: "update_words",
                      openid: k.data.openid,
                      last_time: time,
                      today_chapter: k.data.today_chapter,//今日章节
                      words_nums: k.data.today_wordnums,//已经背诵单词总数
                    }
                  }).then(res => {
                    console.log("更新数据")
                    k.setData({
                      result: true
                    })
                    wx.hideLoading()
                  }).catch(err => {
                  })
                
                }
                // 不存在
                else {
                  db.collection('study_user').add({
                    // data 字段表示需新增的 JSON 数据
                    data: {
                      study_openid: k.data.openid,//用户id
                      first_time: time,//第一次背诵单词的时间
                      last_time: time,//最后一次背诵的时间
                      words_nums: k.data.today_wordnums,//已经背诵单词总数
                      today_chapter: k.data.today_chapter,//今日章节
                      days: 1,//累积天数
                    }
                  })
                    .then(res => {
                      console.log(res)
                      k.setData({
                        result: true
                      })
                      wx.hideLoading()
                    })
                    .catch(console.error)
                }
              }
              // 依然存在需要复习的单词
              else {
                // 删除当前单词
                k.data.review_words.splice(0, 1)
                k.setData({
                  word: k.data.words[0],
                  isshowexplain: false,
                })
              }
            }
          }
        }
      },
    

    4、问题反馈

    • 第一个版本的demo写完以后,上线测试了一下。bug非常多!
    • 页面自动滚动、单词显示不全
    • 新用户无法读取最新单词库 用户无法更新
    • 单词未背完,直接返回,程序会崩溃 单词数量出现异常
    • 之后根据bug,一个一个找原因。后面还是慢慢找到了一些原因,比如啥变量声明错误、程序异常终止… 当然目前小程序上的背单词模块部分bug已经修复,但是依然有很多bug存在,只有在今后的版本更新再修复了//最近时间不太充足

    5、收获
            其实很久没有写过小程序了,很多语法都忘得差不多了。这几天稍微有点空,加上前段时间被英语折磨,一时心血来潮,就写了这个模块,希望以后有时间再慢慢完善吧。
             这次觉得收获最大的事,学会了动态加载字体吧。以前对于字体这块,觉得没有啥,能看就行。后面发现单词如果还是默认字体的话,有点不好看。然后就不断百度,找方法。大多数的方法就是将字体库加载到本地或者服务器,再使用。加载到本地这个,不太行,一个字体都几M了,小程序代码限制在2M以内[近期内测,小程序最多16M];部署到服务器,不占空间,但是延迟大,用户体验不是很好。综合一些因素,选择了后者,部署在云服务器吧,自己用用也是可以了。[bug:部分手机无法加载新字体]
             虽然目前自己的背单词模块使用体验不是很好,但是毕竟是自己一点一点写出来的,非常喜欢!!

    总结

             "巧记单词"模块已经上线小程序,感兴趣的小伙伴可以体验体验【小程序:海轰Pro,在"创意小屋"中】
            目前还处在测试阶段,bug,肯定是非常多,以后有时间再慢慢更新吧。之后版本会依次加入单词默写、单词错误次数分析等功能。程序是一时头脑发热写的,很多地方写的不好,大佬勿喷。开发差不多用了一个下午+一个晚上,时间跨度2天。
            如果有小伙伴发现bug或有什么好的提议,欢迎留言,谢谢♪(・ω・)ノ
    在这里插入图片描述

    展开全文
  • 缩写词是由一个短语中每个单词的第一个字母组成,均为大写。例如,CPU是短语“central processing unit”的缩写。 函数接口定义: acronym(phrase); phrase是短语参数,返回短语的缩写词 裁判测试程序样例: /* 请...

    缩写词

    缩写词是由一个短语中每个单词的第一个字母组成,均为大写。例如,CPU是短语“central processing unit”的缩写。

    函数接口定义:

    acronym(phrase);
    phrase是短语参数,返回短语的缩写词
    

    裁判测试程序样例:

    
    /* 请在这里填写答案 */
    phrase=input()
    print(acronym(phrase))
    

    输入样例:

    central  processing  unit
    

    输出样例:

    CPU
    

    思路:

    用title把每个单词的首字母大写,然后输出第一个字母。

    代码如下:

    def acronym(p):
        s=""
        p=p.title()
        a=p.split()
        for i in range(0,len(a)):
            s=s+a[i][0]
        return s
    
    展开全文
  • 从文本中提取单词生成单词本

    千次阅读 多人点赞 2019-02-06 16:51:35
    词频统计及单词提取 对一段英文文本做词频统计,提取单词,查词,最终生成一个单词本,生成的单词本可以导入Anki中学习。 问题分析 考虑到单词的变形,分词后先做词形还原,之后再进行词频统计。去除掉较为简单的...

    词频统计及单词提取

    对一段英文文本做词频统计,提取单词,查词,最终生成一个单词本,生成的单词本可以导入Anki中学习。

    问题分析

    考虑到单词的变形,分词后先做词形还原,之后再进行词频统计。去除掉较为简单的单词后,调用金山词霸API查询词义,下载发音音频,生成单词本。同时,用PyQt5做了一个简单的GUI。效果如下:
    在这里插入图片描述
    打包后生成的软件见: https://pan.baidu.com/s/1fuVdKJWqUqM97jUgTyFMrg 提取码: pstg
    核心代码如下:

    # -*- coding: utf-8 -*-
    '''
    分词,提词的主程序
    先词形还原,再词频统计
    去掉简单的单词后,生成单词本
    '''
    import requests,re,threading,traceback,os
    from bs4 import BeautifulSoup
    from tqdm import tqdm
    from nltk.stem import WordNetLemmatizer
    from nltk.corpus import wordnet
    from nltk import pos_tag
    lemmatizer = WordNetLemmatizer()
    Max_lookup_connections = 5
    Max_download_audio_connections = 10
    class vocabulary(object):
        def __init__(self,file,learned_words_file = 'learned_words.txt',save_path='',download_audio=False):
            '''
            :param: file: 待处理的文本
            :param: learned_words_file: 已学会的简单的单词本
            :param: save_path: 要保存的路径,默认程序文件下
            :param: download_autio:是否下载音频,默认为false
            '''
            #生成保存路径
            self.file = file
            if save_path:
                if not os.path.isdir(save_path):
                    os.makedirs(save_path)
            else:
                save_path = './'
            self.learned_words_file = learned_words_file 
            self.save_path=save_path
            self.name = os.path.basename(file).split('.')[0]
            self.save_filename = self.save_path + os.sep + self.name + '_vocabulary.txt'
            self.download_audio_flag = download_audio
    
        def run(self):
            try:
                raw_text,text = self.get_content(self.file)#获取文本,原始文本用以提供例句
                words = self.lemmatizing(text)#单词变体还原,词形还原
                self.word_counts = self.counts(words)#计数
                words = self.remove_words(words)#去除简单的,已熟知的单词
                look_up_result = self.get_look_up_result(words,raw_text)#查词
                self.write_words(look_up_result)
                if self.download_audio_flag:
                    self.download_audio(look_up_result)
                return look_up_result
            except:
                traceback.print_exc()
                return None
        def get_content(self,file):
            '''
            获取文本内容,输入文件名,返回字符串。
            '''
            with open(file,'r',encoding='utf-8') as f:
                raw_text = f.read()
            text = raw_text.lower()
            for ch in '''`~!@#$%^&*()_+-={}|[]\\:"?>”<;'“—‘’.…/,''':
                text = text.replace(ch,' ')
            return raw_text,text
        def lemmatizing(self,text):
            '''
            词形还原,输入字符串,返回单词列表
            '''
            words = text.split()
            print('words:',len(words))
            lemm_words = []
            with tqdm(total = len(words),desc='lemmatizing') as fbar:
                for i in range(len(words)):
                    j = i+1
                    self.get_lemmed_one(words[i],lemm_words)
                    if j%1000==0:
                        fbar.update(1000)
            #print('lemm_words: ',len(lemm_words))
            return lemm_words
        def get_lemmed_one(self,word,lemm_words):
            try:
                tag = pos_tag([word])#标注单词在文本中的成分 
                #需要用nltk.download('averaged_perceptron_tagger')下载资源
                pos = self.get_pos(tag[0][1])#转为词性
                if pos:
                    lemm_word = lemmatizer.lemmatize(word,pos)#词形还原,还原词根
                    lemm_words.append(lemm_word)
                else:
                    lemm_words.append(word)
            except:
                print(word)
        def get_pos(self,tag):
            #需要用nltk.download('wordnet')下载资源
            if tag.startswith('J'):
                return wordnet.ADJ
            if tag.startswith('V'):
                return wordnet.VERB
            if tag.startswith('N'):
                return wordnet.NOUN
            if tag.startswith('R'):
                return wordnet.ADV
            else:
                return ''
        def counts(self,words):
            '''
            词频统计,输入单词列表,输出词频,返回字典{单词:词频}
            '''
            #print(len(words))
            counts = {}
            for word in words:
                counts[word] = counts.get(word,0) +1
            items = list(counts.items())
            items.sort(key=lambda x:x[1],reverse=True)
            print('set words:',len(counts))
            #for i in range(20):
            #    word,count = items[i]
            #    print('{0:<10}{1:>5}'.format(word,count))
            return counts
        def remove_words(self,words):
            learned_words=[]
            try:
                with open(self.learned_words_file,'r',encoding='utf-8') as f:
                    for line in f:
                        line = line.replace('\n','')
                        learned_words.append(line)
            except:
                learned_words=[]
            finally:
                words = list(set(words) - (set(learned_words)))
                print('removed_words:',len(words))
                return words
        def look_up_one(self,word):
            #查询单个单词,返回:key(单词),ps(音标),pron(音频url),pos(词性),acceptation(释义)
            #调用金山词霸开放平台API
            #http://dict-co.iciba.com/api/dictionary.php?w=moose&key=4EE27DDF668AD6501DCC2DC75B46851B
            url = 'http://dict-co.iciba.com/api/dictionary.php?w={}&key=4EE27DDF668AD6501DCC2DC75B46851B'.format(word)
            #print(url)
            try:
                resp = requests.get(url)
                resp.encoding = 'utf-8'
                soup = BeautifulSoup(resp.text,'html.parser')
                key = soup.key.string
                ps = '[{}]'.format(soup.ps.string)
                pron = soup.pron.string
                pos_list = soup.select('pos')
                pos = pos_list[0].string
                acceptation_list = soup.select('acceptation')
                acceptation = pos_list[0].string + ' ' + acceptation_list[0].string.replace('\n','').replace('\r','')
                for i in range(1,len(pos_list)):
                    acceptation = acceptation + '<div>' + pos_list[i].string + ' '  + acceptation_list[i].string.replace('\n','').replace('\r','') + '</div>'
                return (key,ps,pron,pos,acceptation)
            except:
                #print(url)
                #traceback.print_exc()
                return None
        def get_sen(self,word,text):
            #获取原文例句:
            pattern= '\\..*?{}.*?\\.'.format(word) #问题:大单词包含该小单词
            match =re.search(pattern,text)
            if match:
                return match.group(0)[2:]
            else:
                return ' '
    
        def get_look_up_result(self,words,text):
            '''
            查词,返回字典列表,key(单词),ps(音标),pron(音频url),pos(词性),acceptation(释义)
            key: 单词,count: 词频,ps: 音标,pron: 音频url,pos:词性,sen:原文例句,
            '''
            data = []
            threads=[]
            semaphore = threading.Semaphore(Max_lookup_connections)
            with tqdm(total = len(words),desc='Looking Up') as fbar:
                for i in range(len(words)):
                    j = i+1
                    word = words[i]
                    #self.look_up(word,text,data,semaphore)
                    semaphore.acquire()
                    t = threading.Thread(target=self.look_up,args=(word,text,data,semaphore))
                    threads.append(t)
                    t.start()
                    if j%100==0:
                        fbar.update(100)
                for t in threads:
                    t.join()
            print('vocabulary:',len(data))
            #print(data[:10])
            return data
        def look_up(self,word,text,data,semaphore):
            '''
            查词,返回字典列表,key(单词),ps(音标),pron(音频url),pos(词性),acceptation(释义)
            key: 单词,count: 词频,ps: 音标,pron: 音频url,pos:词性,sen:原文例句,
            '''
            if self.look_up_one(word):
                datum = {}
                key,ps,pron,pos,acceptation=self.look_up_one(word)
                sen = self.get_sen(word,text)
                count = self.word_counts.get(key,0)
                datum['key'] = key
                datum['count'] = count
                datum['ps'] = ps
                datum['pron'] = pron
                datum['pos'] = pos
                datum['acceptation'] = acceptation
                datum['sen'] = sen
                data.append(datum)
            semaphore.release()
        def write_words(self,data):
            with open(self.save_filename,'w',encoding='utf-8') as f:
                for datum in data:
                    pron = '[sound:{}.mp3]'.format(datum['key']) 
                    text = '{}\t{}\t{}\t{}\t{}\n'.format(datum['key'],datum['ps'],pron,datum['acceptation'],datum['sen'])
                    f.write(text)
    
        def download_audio_one(self,key,url):
            '''下载单词发音音频'''
            resp = requests.get(url)
            filepath = self.save_path + os.path.sep + 'audio'
            if not os.path.isdir(filepath):
                os.mkdir(filepath)
            filename = filepath + os.sep + key + '.mp3'
            if not os.path.isfile(filename):
                with open(filename,'wb') as f:
                    f.write(resp.content)
        def download_audio_one_thread(self,key,url,semaphore):
            '''下载单词发音音频'''
            resp = requests.get(url)
            filepath = self.save_path + os.path.sep + 'audio'
            filename = filepath + os.sep + key + '.mp3'
            if not os.path.isfile(filename):
                with open(filename,'wb') as f:
                    f.write(resp.content)
            semaphore.release()
        def download_audio(self,data):
            filepath = self.save_path + os.path.sep + 'audio'
            if not os.path.isdir(filepath):
                os.mkdir(filepath)
            threads = []
            semaphore = threading.Semaphore(Max_download_audio_connections)
            len_words = len(data)
            with tqdm(total = len_words,desc='Downloading sudio') as fbar:
                for i in range(len_words):
                    j = i+1
                    key = data[i]['key']
                    url = data[i]['pron']
                    semaphore.acquire()
                    t = threading.Thread(target=self.download_audio_one_thread,args=(key,url,semaphore))
                    threads.append(t)
                    t.start()
                    if j%100==0:
                        fbar.update(100)
                for t in threads:
                    t.join()
    if __name__=='__main__':
        from pandas import DataFrame
        file = 'Bad Blood - John Carreyrou_1.txt'
        work =  vocabulary(file,save_path = '')
        data = work.run()
        #pf = DataFrame(data)
        #print(pf)
    

    生成GUI代码为:

    # -*- coding: utf-8 -*-
    from PyQt5.QtWidgets import QApplication,QMainWindow,QFileDialog,QTableWidgetItem
    from PyQt5.QtGui import QFont,QColor
    from PyQt5.QtCore import Qt,QDir
    from 文本提取单词_UI import Ui_MainWindow
    
    from vocabulary_2 import vocabulary
    from pandas import DataFrame
    import traceback
    import threading
    import os
    class MainWindow(QMainWindow,Ui_MainWindow):
        def __init__(self,parent=None):
            super(MainWindow,self).__init__(parent)
            self.setupUi(self)
            self.file = ''
            self.learned_word_file = ''
            self.savepath = './'
    
            self.setWindowTitle('文本提词')
    
            #连接信号与槽
            self.pushButton_openfile.clicked.connect(self.openfile)#打开文本文件(utf-8)
            self.pushButton_savepath.clicked.connect(self.change_save_path)#改变保存路径
            self.pushButton_learnedfile.clicked.connect(self.openlearnedfile)#打开简单词汇文件(utf-8)
            self.pushButton_start.clicked.connect(self.run)#生成单词本
            self.tableWidget.cellClicked.connect(self.listen_one_new)#播放发音
            self.pushButton_download_audio.clicked.connect(self.download_audio)
    
        def openfile(self):
            #打开文件
            filename, _ = QFileDialog.getOpenFileName(self,'Open file','D:\\','Txt files(*.txt)')
            #print(filename)
            self.label_openfile.setText(filename)
            self.file = filename
        def change_save_path(self):
            #修改保存路径
            directory = QFileDialog.getExistingDirectory(self,'选取文件夹',self.savepath)
            self.savepath = QDir.toNativeSeparators(directory)# 路径以windows支持的显示方式进行显示。
            self.label_savepath.setText(self.savepath)
        def openlearnedfile(self):
            filename, _ = QFileDialog.getOpenFileName(self,'Open file','D:\\','Txt files(*.txt)')
            self.label_learnedfile.setText(filename)
            self.learned_word_file = filename
        def run(self):
            self.statusBar().showMessage('正在查词......')
            self.vocabulary = vocabulary(file=self.file,learned_words_file=self.learned_word_file,save_path=self.savepath)
            data = self.vocabulary.run()
            if data:
                self.show_tablewidget(data)
                self.vocabulary.write_words(self.data)
        def show_tablewidget(self, dict_data):
            '''在tableWidget显示dict_data'''
            tableWidget = self.tableWidget
            '''排序'''
            df = DataFrame(dict_data).sort_values(by='count',ascending = False)
            _temp = df.to_dict('index')
            dict_data = list(_temp.values())
            self.data = dict_data
            '''tableWidget的初始化'''
            list_col = ['key','count','ps','pron','pos','acceptation','sen']
            len_col = len(list_col)
            len_index = len(dict_data)
            tableWidget.setRowCount(len_index)#设置行数
            tableWidget.setColumnCount(len_col)#设置列数
            tableWidget.setHorizontalHeaderLabels(['单词', '词频', '音标','发音','词性','释义','例句']) # 设置垂直方向上的名字
            tableWidget.setVerticalHeaderLabels([str(i) for i in range(1, len_index + 1)]) # 设置水平方向上的名字
            '''填充数据'''
            for index in  range(len_index):
                for col in range(len_col):
                    name_col = list_col[col]
                    if name_col == 'pron':
                        item = QTableWidgetItem('播放')
                        item.setTextAlignment(Qt.AlignCenter)
                        font = QFont()
                        font.setBold(True)
                        font.setWeight(75)
                        item.setFont(font)
                        item.setBackground(QColor(218, 218, 218))
                        item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
                        tableWidget.setItem(index, col, item)
                    else:
                        tableWidget.setItem(index,col,QTableWidgetItem(str(dict_data[index][name_col])))
            tableWidget.resizeColumnsToContents()
            tableWidget.setColumnWidth(5, 500)
        def listen_one_new(self,row,column):
            if column == 3:
                download_one = self.data[row]
                listen_thread = threading.Thread(target = self.listen_one_new_thread,args=(download_one,),daemon=True)
                listen_thread.start()
        def listen_one_new_thread(self,download_one):
            key = download_one['key']
            url = download_one['pron']
            self.vocabulary.download_audio_one(key,url)
            filename = self.savepath + os.path.sep + 'audio' + os.sep + key + '.mp3'
            print(os.path.abspath(filename))
            os.system(os.path.abspath(filename))
        def download_audio(self):
            self.statusBar().showMessage('音频下载中...')
            try:
                self.vocabulary.download_audio(self.data)
                self.statusBar().showMessage('音频下载成功')
            except:
                self.statusBar().showMessage('音频下载失败')
    
    if __name__=='__main__':
        import sys
        app = QApplication(sys.argv)
        window = MainWindow()
        window.show()
        sys.exit(app.exec_())
    

    UI代码为:

    # -*- coding: utf-8 -*-
    
    # Form implementation generated from reading ui file '文本提取单词.ui'
    #
    # Created by: PyQt5 UI code generator 5.11.3
    #
    # WARNING! All changes made in this file will be lost!
    
    from PyQt5 import QtGui, QtWidgets
    from PyQt5.QtCore import QRect, QMetaObject,QCoreApplication
    from PyQt5.QtWidgets import QWidget,QVBoxLayout,QHBoxLayout,QPushButton,QLabel,QSpacerItem,QSizePolicy,QTableWidget,QStatusBar
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName("MainWindow")
            MainWindow.resize(833, 594)
            self.centralwidget = QWidget(MainWindow)
            self.centralwidget.setObjectName("centralwidget")
            self.verticalLayout = QVBoxLayout(self.centralwidget)
            self.verticalLayout.setObjectName("verticalLayout")
            self.horizontalLayout = QHBoxLayout()
            self.horizontalLayout.setObjectName("horizontalLayout")
            self.pushButton_openfile = QPushButton(self.centralwidget)
            self.pushButton_openfile.setObjectName("pushButton_openfile")
            self.horizontalLayout.addWidget(self.pushButton_openfile)
            self.label_openfile = QLabel(self.centralwidget)
            self.label_openfile.setText("")
            self.label_openfile.setObjectName("label_openfile")
            self.horizontalLayout.addWidget(self.label_openfile)
            spacerItem = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
            self.horizontalLayout.addItem(spacerItem)
            self.pushButton_start = QPushButton(self.centralwidget)
            self.pushButton_start.setObjectName("pushButton_start")
            self.horizontalLayout.addWidget(self.pushButton_start)
            self.verticalLayout.addLayout(self.horizontalLayout)
            self.horizontalLayout_2 = QHBoxLayout()
            self.horizontalLayout_2.setObjectName("horizontalLayout_2")
            self.pushButton_savepath = QPushButton(self.centralwidget)
            self.pushButton_savepath.setObjectName("pushButton_savepath")
            self.horizontalLayout_2.addWidget(self.pushButton_savepath)
            self.label_savepath = QLabel(self.centralwidget)
            self.label_savepath.setText("")
            self.label_savepath.setObjectName("label_savepath")
            self.horizontalLayout_2.addWidget(self.label_savepath)
            spacerItem1 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
            self.horizontalLayout_2.addItem(spacerItem1)
            self.pushButton_learnedfile = QPushButton(self.centralwidget)
            self.pushButton_learnedfile.setObjectName("pushButton_learnedfile")
            self.horizontalLayout_2.addWidget(self.pushButton_learnedfile)
            self.label_learnedfile = QLabel(self.centralwidget)
            self.label_learnedfile.setText("")
            self.label_learnedfile.setObjectName("label_learnedfile")
            self.horizontalLayout_2.addWidget(self.label_learnedfile)
            spacerItem2 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
            self.horizontalLayout_2.addItem(spacerItem2)
            self.pushButton_download_audio = QPushButton(self.centralwidget)
            self.pushButton_download_audio.setObjectName("pushButton_download_audio")
            self.horizontalLayout_2.addWidget(self.pushButton_download_audio)
            self.verticalLayout.addLayout(self.horizontalLayout_2)
            self.tableWidget = QTableWidget(self.centralwidget)
            self.tableWidget.setObjectName("tableWidget")
            self.tableWidget.setColumnCount(0)
            self.tableWidget.setRowCount(0)
            self.verticalLayout.addWidget(self.tableWidget)
            MainWindow.setCentralWidget(self.centralwidget)
            self.statusbar = QStatusBar(MainWindow)
            self.statusbar.setObjectName("statusbar")
            MainWindow.setStatusBar(self.statusbar)
    
            self.retranslateUi(MainWindow)
            QMetaObject.connectSlotsByName(MainWindow)
    
        def retranslateUi(self, MainWindow):
            _translate = QCoreApplication.translate
            MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
            self.pushButton_openfile.setText(_translate("MainWindow", "打开文件"))
            self.pushButton_start.setText(_translate("MainWindow", "开始"))
            self.pushButton_savepath.setText(_translate("MainWindow", "保存路径"))
            self.pushButton_learnedfile.setText(_translate("MainWindow", "需要剔除的单词"))
            self.pushButton_download_audio.setText(_translate("MainWindow", "下载音频"))
    
    
    展开全文
  • Java 语法

    千次阅读 多人点赞 2017-09-10 21:46:41
    多个单词:从第二个单词开始,每个单词首字母大写 举例:studentAge,showAllNames() 常量 全部大写 一个单词:大写 举例:PI 多个单词:大写,并用_隔开 举例:STUDENT_MAX_AGE 注释(掌握) ...
  • hbuilder重复单词多选快捷键

    千次阅读 2019-05-21 16:44:08
    在HBuilder里多选词的快捷键是ctrl+shift+d。
  • 多种方式实现英文单词词频统计和检索系统

    千次阅读 多人点赞 2020-03-01 22:01:47
    一、课程设计的目的 1、掌握数据结构课程的基本内容和方法。...一篇英文文章存储在一个文本文件中,分别基于线性表、二叉排序树和散列表的不同存储结构,实现单词词频的的统计和单词的检索功能。同时计算不同检索...
  • 即a变为d,b变为e,...,w变为z,x变为a,y变为b,z变为c。  例如,lanqiao会变成odqtldr。 输入格式  输入一行,包含一个单词单词中只包含小写英文字母。 输出格式  输出一行,表示加密后的密文。
  • 一款c#实现的实用好玩儿的背单词程序

    千次阅读 多人点赞 2018-10-12 10:04:23
    3.实现隐藏单词和隐藏释义功能,通过多个Timer的相互作用,可以先出来单词,再通过隐藏释义按钮使单词释义若干秒之后再显示单词释义,隐藏单词的功能刚好相反。在此过程中还可以通过加速减速按钮,使单词或者释义...
  • 随机生成单词

    千次阅读 2020-06-28 16:49:45
    * @description: 随机生成单词 * a生成单词个数;b生成单词最长长度 */ public static String[] words(int a, int b){ String[] words = {}; if(a>0 && b>0) { words = new String[a]; String...
  • C语言统计不同单词

    千次阅读 2019-07-06 10:59:08
    统计输入的一个句子中有多少单词(不重复的),句子只有小写字母跟空格 分析 从头遍历输入的句子,把每个单词赋给字符串变量t,如果words字符串数组中没有该单词,则计数count+1,并把单词复制到words数组中 代码 #...
  • Python 背单词小程序

    千次阅读 2019-03-03 17:03:59
    源代码: import random def remember(answer,result,aquestion,aw,wrong_answer): while answer!=-1: x=random.randint(0,len(result)-1) if x not in aquestion: aquestion.append(x)...
  • 英语单词拼写游戏开发纪录

    千次阅读 2017-03-13 21:43:54
    将游戏工程更新到了Unity2018,并开源到GitHub。...   2014年开始学习游戏开发,至今也算有些年头了,虽然折腾过不少项目,却从未留下点痕迹,...为什么会想到开发单词拼写游戏? 英语老师每周会发四六级真题词汇文...
  • Python单词反写、单词倒排

    千次阅读 2020-04-27 23:44:14
    通过s 接收输入的单词句子,在利用split()函数抛出单词 最后再用reverse()函数将x倒序存放。 `` s=input() x=s.split() x.reverse() print(" ".join(str(i) for i in x)) 在输出时不想输出后直接换行可用print...
  • Python 统计单词

    千次阅读 2021-03-28 11:36:31
    统计单词的数量 描述 输入一个英文句子,以回车符结束,单词间以空格分隔,标点符号后跟至少一个空格, 统计并输出单词的个数(仅统计单词,数字按单词计,不计算标点符号,重复单词出现几次就统计几次)。‪‬‪‬...
  • Python生成CVCE的单词列表

    千次阅读 2019-03-03 21:11:43
    consonants=[‘b’,‘c’,‘d’,‘f’,‘g’,‘h’,‘j’,‘k’,‘l’,‘m’,‘n’,‘p’,‘q’,‘r’,‘s’,‘t’,‘v’,‘w’,‘x’,‘y’,‘z’] beforeConsonants=[‘b’,‘c’,‘d’,‘f’,‘g’,‘h’,‘j’,...
  • C语言实现单词翻转

    千次阅读 2019-08-25 13:51:28
    单词内部字母前后翻转 #include<stdio.h> #include<string.h> void reverse(char s[]) { char temp; int low,high,length,i=0; length=strlen(s); while(i<length) { while(s[i]==' ' &...
  • python必备单词

    千次阅读 2019-02-20 09:44:54
    remove(key)方法,删除()中元素 for x in… 把list 或 tuple 的每个元素带入变量x 中 while n=0 当n=0(条件满足)时保持循环,(条件不满足)时退出循环 True 正 确 False 错 误 if 条件判定,如果 elif 条件判定,在...
  • 算法题解:单词接龙(JAVA+BFS算法)

    千次阅读 2019-07-15 01:01:25
    单词接龙(JAVA+BFS算法) 原题链接:127.Word Ladderhttps://leetcode.com/problems/word-ladder/ 给定两个单词(beginWord和 endWord)和一个字典,找到从beginWord 到endWord 的最短转换序列的长度。转换需遵循...
  • 查找字符串中每个单词的个数出现的次数 看到题目的第一感觉给人时比较复杂 涉及到的子算法比较多 ,写这个算法的木的是给大家看看 我们现在学到算法可能就是以后一些复杂功能的一小部分 我们先把这个算法的大概...
  • Python查找文本频率最高的单词

    千次阅读 2017-10-01 13:10:15
    Python实现读取可以用空格和逗号隔开的英语文档,找出文本频率最高的单词,和出现的次数
  • 1、linux shell 命令行下删除一个单词的方法: 我们有时在Linux下输入命令时,难免有输错的时候,在有的终端上,输错后,用退格则出现乱码现像,可以用以下方法解决。 CTRL + H #相当于按了一次退格键,一次删除一个...
  • leetcode212. 单词搜索 II

    千次阅读 热门讨论 2020-02-21 16:35:22
    给定一个二维网格board和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。...
  • python:查找兄弟单词

    千次阅读 多人点赞 2021-05-12 09:10:48
    题目描述 定义一个单词的“兄弟单词”为:交换该单词字母顺序,而不添加、删除、修改原有的字母就能生成的单词。...再输入一个单词,为待查找的单词x 最后输入数字k 输出描述: 输出查找到x的兄..
  • 基于python的单词查询

    千次阅读 2019-02-22 22:24:25
    基于python的单词查询Web站点爬取所选用的Python库介绍1.Flask2.bs43.json4.urllib爬虫设计Web站点设计程序运行过程:总结源代码 本篇博客是对我python网络编程所学知识的运用及总结。以下是具体内容: 1、 采用...
  • python里使用正则表达式搜索单词

    千次阅读 2017-09-23 11:59:30
    在python里有强大的正则表达式模块re,用来它进行模式匹配是非常方便的,比如下面的例子,就是用来从一段文字里查找一个单词,如下:import re pattern = 'this' text = 'http://blog.csdn.net/caimouse is great, ...
  • 基本思路:以COCA两万单词表为基础,用python爬取金山词霸的单词词性,词义,音频分别存入sqllite。背单词的时候根据需要自定义数据的选择方式。 话不多说,直接上代码:写的比较随意,还请见谅。 创建数据库 cu...
  • 英文单词词频统计

    千次阅读 2017-04-02 11:09:23
    英文单词词频统计 问题描述:做一个词频统计程序,该程序具有以下功能  (1)可导入任意英文文本文件  (2)统计该英文文件中单词数和各单词出现的频率(次数),并能将单词按字典顺序输出。  (3)将单词及频率写入...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 315,104
精华内容 126,041
关键字:

含x的单词