[Le livre de mots anglais le plus fort Bakusei ww] Génère automatiquement le livre de mots anglais requis pour les ingénieurs avec Python-Partie 1

introduction

Je pense que tout le monde l'a acheté une fois. Si vous créez automatiquement un livre de mots anglais en Python,

N'est-il plus nécessaire d'acheter un livre de mots anglais? Je vais tester l'hypothèse.

** Si LGTM dépasse 10, ** Nous en créerons des plus pratiques dans la deuxième partie (ou la deuxième partie), donc si vous le trouvez intéressant, veuillez LGTM ~!

A propos de l'auteur

Biographie

Screen Shot 2020-04-09 at 16.41.03.png Après avoir obtenu son diplôme du département d'ingénierie électrique et informatique d'un collège technique à l'âge de 20 ans, tout en traduisant des spécifications, etc. dans une société de commerce technique, en interprétant lors de visites de fabricants à l'étranger, de ventes d'entreprises, etc. Nous avons continué à dépasser TOEIC 900 pendant environ un an et avons obtenu l'IELTS 7.5. Actuellement, je travaille en tant qu'ingénieur backend et IA comme activité principale et en tant qu'instructeur de conversation en anglais en tant que travail parallèle. Veuillez vérifier ceci pour plus de détails. https://hossyan-blog.com/profile/

Publicité

my_website.png Avant-hier, nous avons ouvert un site d'apprentissage de l'anglais pour les programmeurs. Veuillez jeter un œil à ce blog, qui peut être lu par ceux qui sont sur le point de commencer à apprendre l'anglais ou qui s'inquiètent de savoir comment apprendre l'anglais. https://hossyan-blog.com/

L'introduction est devenue longue, mais j'aimerais entrer immédiatement dans le sujet principal!

table des matières

―― Qu'est-ce que tu vas faire? --Comment faites-vous cela? --Code complet

Que faire?

coding.jpg

Comme présenté dans ici, l'objectif initial de l'utilisation du livre de mots est

"** Pour ne retenir que ce dont vous avez besoin pour atteindre l'objectif que vous souhaitez atteindre **"

Sera. Je pense que les lecteurs de qiita sont des ingénieurs informatiques, donc Cette fois, je vais créer un livre de mots anglais ** afin que les ingénieurs puissent lire des livres techniques.

Comment le faire?

stackoverflow.png 1. Obtenez des données HTML à partir du débordement de pile 2. Analyse morphologique 3. Calculez la fréquence des mots 4. Affichez ceux qui apparaissent fréquemment comme candidats

Puisqu'il s'agit de la première partie, nous utiliserons d'abord les données d'un seul écran de la page HTML suivante balisée avec le mot-clé "Python". https://stackoverflow.com/questions/tagged/python

Passons maintenant à l'introduction du code.

Code entier

Le code entier ressemble à ceci.

from enum import Enum, unique
from typing import List, Tuple, Set, Dict
import requests

from bs4 import BeautifulSoup as bs
from textblob import TextBlob

URL = 'https://stackoverflow.com/questions/tagged/python'
PARSER = "html.parser"
FILTER_BY_COUNT = 2


@unique
class PartOfSpeechToLearn(Enum):
    JJ = 'Adjective'
    VB = 'Verb'
    NN = 'Noun'
    RB = 'Adverb'


if __name__ == '__main__':
    # Get HTML data and remove html tags
    res = requests.get(URL)
    raw_html = bs(res.text, PARSER)
    texts_without_html: str = raw_html.text

    # morphological analysis
    morph = TextBlob(texts_without_html)
    word_and_tag: List[Tuple[str, str]] = morph.tags

    # Filter words to create a book for vocab
    part_of_speech_to_learn = tuple(pos.name for pos in PartOfSpeechToLearn)
    words_to_learn: Set[str] = {
        wt[0]
        for wt in word_and_tag
        if wt[1] in part_of_speech_to_learn
    }
    words_filtered_by_count: Dict[str, int] = {
        word: morph.words.count(word)
        for word in words_to_learn
        if morph.words.count(word) > FILTER_BY_COUNT
    }

    # Show 50 words that are most frequently used
    words_in_descending_order: List[Tuple[str, int]] = sorted(
        words_filtered_by_count.items(),
        key=lambda x: x[1],
        reverse=True
    )
    for i, word_and_count in enumerate(words_in_descending_order[:50]):
        print(f'rank:{i} word: {word_and_count}')

Définir la partie du discours à obtenir pour le livre de mots

Cette fois, nous allons acquérir les quatre parties suivantes **.

  1. ** Addjectif ** (Adjectif) Partie qui modifie la nomenclature telle que big et drôle
  2. ** Verbe ** (verbe) Partie du mouvement, comme courir ou écrire
  3. ** Nom ** (substantif) Apple, etc.
  4. ** Adverbe ** Partie qui modifie les adjectifs et les verbes tels que vraiment et sûrement
@unique
class PartOfSpeechToLearn(Enum):
    JJ = 'Adjective'
    VB = 'Verb'
    NN = 'Noun'
    RB = 'Adverb'

Supprimer les balises HTML après avoir obtenu des données HTML

J'obtiens du HTML à partir d'une URL et je le convertis en texte sans balises HTML.

# Get HTML data and remove html tags
res = requests.get(URL)
raw_html = bs(res.text, PARSER)
texts_without_html: str = raw_html.text

Analyse morphologique

Effectuer une analyse morphologique pour limiter les parties de mots incluses dans le livre de mots. TextBlob est utilisé pour l'analyse morphologique. Pour TextBlob, j'ai fait référence à ici.

# morphological analysis
morph = TextBlob(texts_without_html)
word_and_tag: List[Tuple[str, str]] = morph.tags

Filtrer par Wordbook

Après avoir filtré uniquement les mots de partie que vous souhaitez inclure dans le livre de mots, créez un dictionnaire avec le mot comme clé et le nombre d'occurrences comme valeur tout en filtrant par le nombre d'occurrences fréquentes (FILTER_BY_COUNT = 2).

part_of_speech_to_learn = tuple(pos.name for pos in PartOfSpeechToLearn)
words_to_learn: Set[str] = {
    wt[0]
    for wt in word_and_tag
    if wt[1] in part_of_speech_to_learn 
}
words_filtered_by_count: Dict[str, int] = {
    word: morph.words.count(word)
    for word in words_to_learn
    if morph.words.count(word) > FILTER_BY_COUNT
}

Afficher les 50 premiers après le tri dans l'ordre décroissant

words_in_descending_order: List[Tuple[str, int]] = sorted(
    words_filtered_by_count.items(),
    key=lambda x: x[1],
    reverse=True
)

# Show 50 words that are most frequently used
for i, word_and_count in enumerate(words_in_descending_order[:50]):
    print(f'rank:{i} word: {word_and_count}')

Résultat d'exécution

surprise.jpg

Peut-il s'agir d'un livre de mots anglais .....................?

Cliquez ici pour les résultats d'exécution essentiels .....................!

rank:0 word: ('i', 96)
rank:1 word: ('python', 86)
rank:2 word: ('ago', 50)
rank:3 word: ('bronze', 36)
rank:4 word: ('have', 29)
rank:5 word: ('×', 25)
rank:6 word: ('stack', 21)
rank:7 word: ('file', 17)
rank:8 word: ('List', 17)
rank:9 word: ('list', 17)
rank:10 word: ('data', 16)
rank:11 word: ('like', 14)
rank:12 word: ('be', 14)
rank:13 word: ('language', 13)
rank:14 word: ('pandas', 13)
rank:15 word: ('code', 12)
rank:16 word: ('create', 11)
rank:17 word: ('there', 10)
rank:18 word: ('dataframe', 10)
rank:19 word: ('not', 9)
rank:20 word: ('function', 9)
rank:21 word: ('silver', 9)
rank:22 word: ('work', 8)
rank:23 word: ('String', 8)
rank:24 word: ('string', 8)
rank:25 word: ('Get', 8)
rank:26 word: ('get', 8)
rank:27 word: ('r', 7)
rank:28 word: ('R', 7)
rank:29 word: ('tags', 7)
rank:30 word: ('following', 7)
rank:31 word: ('flask', 7)
rank:32 word: ('input', 7)
rank:33 word: ('do', 7)
rank:34 word: ('plot', 6)
rank:35 word: ('layout', 6)
rank:36 word: ('import', 6)
rank:37 word: ('array', 6)
rank:38 word: ('use', 6)
rank:39 word: ('below', 6)
rank:40 word: ('object', 6)
rank:41 word: ('format', 6)
rank:42 word: ('python-3.x', 6)
rank:43 word: ('app', 6)
rank:44 word: ('log', 5)
rank:45 word: ('add', 5)
rank:46 word: ('variable', 5)
rank:47 word: ('scrapy', 5)
rank:48 word: ('def', 5)
rank:49 word: ('c', 5)

Hmm, c'est un peu subtil. Cependant, le résultat est presque comme prévu.

Points d'amélioration et méthodes d'amélioration

meeting_1.jpg

Il y a trois raisons subtiles: (Corrigé lors de l'écriture de la suite Update 4/23 11:57)

  1. Certains mots ne sont utilisés que dans le programme
  2. Pas insensible à la casse
  3. Overfit à la page de débordement de pile

Une façon d'améliorer 1 est de ** rendre le prétraitement un peu plus sophistiqué **. Concernant 3, il semble nécessaire d'augmenter les données acquises ** en mélangeant la page de question individuelle de stackoverflow, d'autres blogs techniques, des actualités techniques, etc. **.

À la fin

coffee.jpg

** Si LGTM dépasse 10, ** je corrigerai les points d'amélioration et rédigerai l'article suivant (deuxième partie ou deuxième partie). Et lorsque le livre de mots est terminé, partagez les données avec vous

Nous en ferons un formulaire qui peut être utilisé comme un livre de mots!

Donc, si vous trouvez cette série intéressante, merci ** LGTM! ** **

Suite

(** Over LGTM10 !! (Merci) ** Actuellement, j'écris un article pour le prochain travail, mais je peux écrire autant d'articles polis qu'il y a de LGTM, donc si vous pensez que c'est bon, veuillez continuer vers LGTM. ! Mise à jour 23/04 à 9h00)

J'ai écrit la deuxième partie! Cliquez ici s'il vous plait! [Le livre de mots anglais le plus fort Bakusei ww] Génère automatiquement un livre de mots anglais requis par les ingénieurs avec Python-Part 2

Recommended Posts

[Le livre de mots anglais le plus fort Bakusei ww] Génère automatiquement le livre de mots anglais requis pour les ingénieurs avec Python-Partie 1
Programme de livre de mots anglais lié à des documents Google
[Python] Traduisez automatiquement les PDF avec DeepL tout en conservant le format d'origine. [Windows / Word requis]