Je pense que tout le monde l'a acheté une fois. Si vous créez automatiquement un livre de mots anglais en Python,
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/
L'introduction est devenue longue, mais j'aimerais entrer immédiatement dans le sujet principal!
―― Qu'est-ce que tu vas faire? --Comment faites-vous cela? --Code complet
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.
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.
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}')
Cette fois, nous allons acquérir les quatre parties suivantes **.
@unique
class PartOfSpeechToLearn(Enum):
JJ = 'Adjective'
VB = 'Verb'
NN = 'Noun'
RB = 'Adverb'
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
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
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
}
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}')
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.
Il y a trois raisons subtiles: (Corrigé lors de l'écriture de la suite Update 4/23 11:57)
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. **.
** 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
Donc, si vous trouvez cette série intéressante, merci ** LGTM! ** **
(** 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