哈布拉语字典。 第一部分

朋友们,下午好。


我解决了编译Habrahabr字典的问题,目的是跟踪新语言,新框架,新管理实践等的出现。 简而言之,是新词。


结果是英语单词列表“在主格和单数”。


他在Windows 10 x64环境中进行了此操作,在Anaconda 5.1.0的Spyder编辑器中使用了Python 3语言,并使用了有线网络连接。


在本文中,我将以有限的示例获得一个英语单词词典。 如果这个话题变得很有趣,那么将来我计划在精选的Habr文章中获得包含英语和俄语单词的字典。 使用俄语,一切都变得更加复杂。


解析过程


从这里拿了光盘。 下面是我的解析器版本的代码。


要收集Habr的字典,您需要绕过他的文章并从中选择文章的文本。 我没有处理文章的元信息。 关于Habré的文章带有我的“编号”,例如https://habr.com/post/346198/ 。 文章枚举的范围是0到354366,这是该项目时的最后一篇文章。


对于每个问题,我们尝试获取一个html页面,当此页面成功时,我们从html结构中拉出文章的标题和文本。 旁路代码如下:


import pandas as pd import requests from bs4 import BeautifulSoup dataset = pd.DataFrame() for pid in range(350000,354366): r = requests.get('https://habrahabr.ru/post/' +str(pid) + '/') soup = BeautifulSoup(r.text, 'html5lib') if soup.find("span", {"class": "post__title-text"}): title = soup.find("span", {"class": "post__title-text"}).text text = soup.find("div", {"class": "post__text"}).text my_series = pd.Series([pid, title, text], index=['id', 'title', 'text']) df_new = pd.DataFrame(my_series).transpose() dataset = dataset.append(df_new, ignore_index = True) 

根据经验确定物品本身少于数量的三倍。 我训练了4366个号码-这是我的系统在半小时内能承受的负载。


我没有进行速度优化,尽管他们说如果您开始在100个线程中进行处理,它将更快。


我将结果保存到磁盘


 dataset.to_excel(directory+'dataset.xlsx', sheet_name='sheet1', index=False) 

-以免重复从Internet进行的缓慢下载。 该文件的大小为10兆字节。


我对乐器的英文名称感兴趣。 我不需要不同形式的术语,我想立即获得正常的单词形式。 显然,最常用的词是“在...中”,“在...上”和“通过”,我们将其删除。 为了规范字典,我使用了ntlk库中的English Stimmer Porter。


我使用间接方法创建了字典单词列表,请参见以“ from sklearn.feature_extraction.text import CountVectorizer”开头的代码。 我稍后会需要。


 import re import nltk nltk.download('stopwords') from nltk.corpus import stopwords from nltk.stem.porter import PorterStemmer corpus = [] for i in range(0, len(dataset.index)): review = re.sub('[^a-zA-Z]', ' ', dataset['text'][i]) review = review.lower() review = review.split() ps = PorterStemmer() review = [ps.stem(word) for word in review if not word in set(stopwords.words('english'))] review = ' '.join(review) corpus.append(review) from sklearn.feature_extraction.text import CountVectorizer cv = CountVectorizer() X = cv.fit_transform(corpus).toarray() names = cv.get_feature_names() dfnames = pd.DataFrame(names).transpose() dfnames.to_excel(directory+'names.xlsx', sheet_name='sheet1', index=False) 

名称对象是您要查找的字典。 我们将其保存到磁盘。


结果概述


事实证明,已经标准化的单词超过3万条。 这些只是4366的文章编号和仅英文单词。


来自有趣的:


  1. 文章作者使用许多奇怪的“单词”,例如:aaaaaaaaaaaaaa,aaaabbbbccccdddd或zzzhoditqxfpqbcwr


  2. 从对象X中,我们获得样本中最流行的10个英语单词:

Word PC
iter 4133
op 4030
返回2866
ns 2834
ID 2740
名字2556
新2410
数据2381
弦2358
http 2304

Source: https://habr.com/ru/post/zh-CN413223/


All Articles