微信小程序「法语记忆:学背单词动词变位」V3.3.1 更新:更新了词库

小程序主页法语记忆 学背单词动词变位

v3.3.1 更新内容 🚀

这次更新的主要内容是以下两点:

  1. 更新了法语背单词词库,现已完全覆盖所有词书内单词
  2. 调整了法语背单词入口页,增加了单词列表

更新法语背单词词库 🚀

之前使用了《a Frequency Dictionary of French》总结出来的5000词(下方简称“5000词频”),但是这些单词有一小部分没有收录到拉鲁斯法汉在线词典中,所以就会导致一部分单词在用户使用时查询不到释义等情况。在之前的版本中,使用了“跳过”的办法,让用户先跳过这类单词。因为有几方面原因:

  1. 单词在原有词库本来就有,但是由于少了或者多了一个“s”或者“de”就会被认为不是同一个单词,导致查询失败。例如,“félicitation"和"félicitations"这两个词,在查阅了词典后发现,这个词在词典都是以复数形式作为原型的,所以这个单词在5000词频中的版本加上了一个s。
  2. 单词在5000词频中有,但是在拉鲁斯法汉在线词典中没有。在通常情况下,拉鲁斯法汉在线词典中的词条收录是会比法法词典少很多,所以这次的更新大幅度增加了在小程序词库中没有的词。
  3. 删除了5000词频中的一些语气词,即使这些词在词库中有。

那些被增减的词 🚀

['', 'ouais', 'tandis', 'appliqué', 'vingt-quatre', "d'après", 'publique', 'mark', 'ex', 'visée', 'vingt-cinq', "d'autant", "d'accord", 'félicitation', 'prostitué', "d'ailleurs", 'vendu', 'eh', 'venu', 'chiite', 'centrale', 'uranium', "d'abord", 'capitale', 'syrien', 'ben', 'yougoslave', 'médias', 'hum']
['félicitations', 'média']

5000词频中主要调整的词汇有以上这些,第一个数组内包含这次在5000词频中删去的单词,第二条数组内包含了在5000词频中增加的单词。这些词的筛选主要靠了Python,词库中新增的单词有317个,具体如下(下方很长,直接跳过吧):

['partiellement', 'éditorial', 'transitoire', 'impossibilité', 'tâcher', 'catastrophique', 'issue', 'ajustement', 'constitutionnel', 'écoute', 'expérimenter', 'communautaire', 'nationaliste', 'promoteur', 'informé', 'nuire', 'instabilité', 'accéder', 'levée', 'salaud', 'applicable', 'stratégie', 'étendue', 'assise', 'enquêteur', 'spécifier', 'mentionner', 'prise', 'surpris', 'déplorer', 'irréversible', 'successivement', 'indirectement', 'obtention', 'contrevenant', 'analyste', 'progressiste', 'détenteur', 'entité', 'approprié', 'tiens', 'indemnisation', 'différend', 'alternative', 'privilégier', 'amplifier', 'présentement', 'arrêté', 'soucieux', 'allouer', 'réitérer', 'substantiel', 'écrouler', 'poussée', 'messieurs', '', 'structurel', 'vraisemblablement', 'fondamentalement', 'historien', 'nominal', 'techniquement', 'intervenant', 'protégé', 'brutalement', 'occupant', 'réalisation', 'assigner', 'analogue', 'erroné', 'légitimité', 'coter', 'constructif', 'inexistant', 'organique', 'concrètement', 'conférer', 'extraction', 'continuellement', 'génétiquement', 'lourdement', 'réglementer', 'coordination', 'parallèlement', 'sauvetage', 'traditionnellement', 'subit', 'spectre', 'chier', 'clef', 'récupération', 'automatiquement', 'écu', 'détailler', 'assurément', 'explicitement', 'pourparler', 'existant', 'composante', 'débouché', 'législature', 'philosophique', 'déploiement', 'paire', 'complexité', 'distorsion', 'juridiction', 'isolement', 'coopération', 'géographique', 'incapacité', 'appartenance', 'formé', 'leader', 'exclu', 'elle-même', 'restant', 'arbitrage', 'scepticisme', 'leadership', 'reconstruire', 'économiquement', 'dominant', 'surcroît', 'politiquement', 'imposition', 'fierté', 'équité', 'identification', 'simultanément', 'regroupement', 'opérateur', 'islamiste', 'syndical', 'hépatite', 'arrivé', 'cocktail', 'surplus', 'élargissement', 'droite', 'avancée', 'concitoyen', 'intergouvernemental', 'additionnel', 'affectation', 'sécuritaire', 'négociateur', 'implantation', 'vêtir', 'sévèrement', 'téléviser', 'réglé', 'consultatif', 'combustible', 'appréhender', 'modernisation', 'delà', 'frappe', 'instruire', 'acharner', 'escompter', 'précédemment', 'inchangé', 'abstenir', 'avantageux', 'retombée', 'dénonciation', 'entraver', 'véhiculer', 'souhaitable', 'volontairement', 'contribuer', 'désignation', 'harmonisation', 'alourdir', 'repenser', 'vocal', 'systématiquement', 'réconciliation', 'connerie', 'encourageant', 'séparatiste', 'énoncer', 'tenant', 'continental', 'seconde', 'œuvrer', 'sortant', 'environnemental', 'moi-même', 'tardif', 'inhabituel', 'publiquement', 'marine', 'ambiguïté', 'réaffirmer', 'verbal', 'accompli', 'confiner', 'spécification', 'activement', 'configuration', 'poétique', 'souveraineté', 'enclin', 'vigilance', 'gestionnaire', 'libéralisation', 'arrivant', 'contingent', 'correctement', 'évaluation', 'nous-mêmes', 'civiliser', 'prévu', 'commune', 'crédibilité', 'vérificateur', 'réformiste', 'constructeur', 'jusque', 'yen', 'grandissant', 'littéralement', 'basculer', 'vigoureux', 'répercussion', 'cibler', 'manifestement', 'incorporer', 'quotidiennement', 'chuter', 'dépendant', 'démographique', 'savoir-faire', 'lui-même', 'compétitivité', 'stabilisation', 'sillage', 'utilisateur', 'troublant', 'extension', 'dégradation', 'munition', 'idéologique', 'affaiblissement', 'inévitablement', 'renforcement', 'provisoirement', 'finale', 'découverte', 'morale', 'état-major', 'comté', 'cohérence', 'climatique', 'mécontentement', 'détachement', 'interprétation', 'rayonnement', 'citoyenneté', 'contraindre', 'advenir', 'conversion', 'opportun', 'habituellement', 'délibérément', 'envergure', 'maternel', 'substitution', 'planification', 'conjointement', 'syndrome', 'propagation', 'indigène', 'radicalement', 'institutionnel', 'plénier', 'deuxièmement', 'attentivement', 'sincérité', 'approvisionnement', 'médiation', 'appui', 'reconstruction', 'acceptation', 'lors', 'soulagement', 'attribution', 'nécessairement', 'acheminement', 'justification', 'retenue', 'incitation', 'moyenne', 'offensive', 'allégement', 'innombrable', 'concurrentiel', 'ethnique', 'initialement', 'consensus', 'étroitement', 'pleinement', 'gouvernemental', 'considérablement', 'prévisible', 'théologie', 'interaction', 'efficacement', 'différemment', 'continuité', 'alentour', 'défaillance', 'immigrant', 'bénéficier', 'croyant']

筛选的过程 🚀

完整代码下载,请点击这里,搜索文件名为20200129-compare_words_between_2_excels.py的文件。

如何快速上手pandas?这里可以参考一个叫做“10 minutes to pandas”(10分钟上手pandas),这里的链接可以直达页面,在这个页面可以快速上手pandas库的使用方法。如果想查看某个函数的使用方法,可以直接ctrl+F进行查找。

思路也很简单:首先读取两个excel中的内容(即单词)并提取有用的部分,然后比较两个列表的差,最后写入一个新的excel文件。

# 分别读取两个excel文件的某个sheet

read_result = pd.read_excel('freq2020.xlsx', 'Sheet1', index_col=None, na_values=['NA'])

# 将读取结果存为array格式,这里的array内有很多没用的东西。

freq = read_result.to_numpy()
# 循环读取刚才array有用的部分,并打印出列表

i = 0
freq_list = []
while i<len(freq) :
    freq_list.append(freq[i][0])
    i=i+1
# 两个list的差

diff=list(set(freq_list).difference(set(dic_fr_list)))

df = pd.DataFrame({'A': 1.,'B': diff})
df.to_excel('diff_2.xlsx', sheet_name='Sheet1')

爬取新增单词释义 🚀

完整代码下载,请点击这里,搜索文件名为20200129-larousse_web_crawler.py的文件。

import urllib
import urllib.request
from bs4 import BeautifulSoup
import random
import time
import pandas as pd

然后是和上一节同样的步骤,即读取excel内的单词列表,这里不再赘述。下方的代码就是简单地从https://www.larousse.fr/dictionnaires/francais/中获取单词的释义和例句。在填充下方的代码之前需要先观察网页的链接结构以及想要爬取的页面元素。比如,这里我们需要爬取bonjour的释义和例句:那么经过观察之后发现,通过链接https://www.larousse.fr/dictionnaires/francais/bonjour即能找到该词。

for循环内首先进行了链接的字符串组合,伪装成浏览器去访问这个链接,然后用beautifulsoup去分析这个链接。

beautifulsoup怎么用?这里有一篇文章可以参考:使用Python3和BeautifulSoup4处理本地html文件;此外,还能参考官方的中文文档,也写得非常清楚,用ctrl+F查询自己想要的内容。

这里使用了soup.find_all("标签",class_="属性")这里p为标签,class为属性(但是千万不要忘了class后面有一个下划线)。怎么查看想要爬取内容的标签和属性?这里以chrome为例,在想要爬取的内容上点击鼠标右键,选择检查,如下图所示:

检查网页元素

  1. 这里是单词的释义,找到右侧对应的标签和属性。
  2. 这里是1所对应的标签和属性位置,那么用definition = soup.find_all("li",class_="DivisionDefinition")去读取所有的内容,并存入definition,之后再根据实际情况使用.get_text()或者.string()进行文字的提取。
  3. 这里是单词的例句,找到右侧对应的标签和属性。
  4. 这里是3所对应的标签和属性位置,那么用exemple = soup.find_all("span",class_="ExempleDefinition")去读取所有的内容,并存入exemple,之后再根据实际情况使用.get_text()或者.string()进行文字的提取。

然后将所有的爬取结果慢慢使用.append()累加,最后一次性像上一节那样写进excel表格内。

这里并非完整代码。完整代码下载,请点击这里,搜索文件名为20200129-larousse_web_crawler.py的文件。

for i in freq_list:
    # 设置随机暂停时间

    stop = random.uniform(1, 3) # 设置随机访问停顿时间

    print(i)

    url = "https://www.larousse.fr/dictionnaires/francais/"
    url_fini = i
    url = url + url_fini
    req = urllib.request.Request(url)
    req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36")
    html = urllib.request.urlopen(req).read()
    soup = BeautifulSoup(html,"lxml")
            
    Catgram = soup.find_all("p",class_="CatgramDefinition")
    definition = soup.find_all("li",class_="DivisionDefinition")
    exemple = soup.find_all("span",class_="ExempleDefinition")
        
    if Catgram == [] : #若为空则显示“暂无”,下同

        Catgram = "暂无词性"
    else :
        Catgram = Catgram[0].get_text("|", strip=True).split('|')[0]   //使bs的get_text进行获取文字
        
    if definition == [] :
        definition = "暂无解释"
    else :
        definition = definition[0].get_text("|", strip=True)
            
    if exemple == [] :
        exemple = "暂无例句"
    else :
        exemple = exemple[0].string

    time.sleep(stop) # 停顿随机时间再次访问

        
    Catgram_string.append(Catgram)
    definition_string.append(definition)
    exemple_string.append(exemple)
    url_fini_string.append(url_fini)

简化界面 🚀

这个版本将原来背单词入口的界面变得更加简洁,并将原来的“今日新词”挪到了“单词列表”内。在单词列表内,依次有“新词”、“待复习”、“已学习”三个切换标签,点击单词可以进行跳转到“单词详情”。在背单词页面中,将原来按钮上的emoji表情改成了更为直观的文字形式。具体如下图:

界面示意图