A3RTの中で「Proofreading API」というのをリクルートがだしている。文章の校正などに役立てる見立てだと思われます。また実用フェーズに入っているのかな?と思い興味を持ちました。
やりたいこと
- Indeedに掲載している求人情報をメディア毎に収集(20件ずつ)
- DataFrame化したあとに、Proofreading APIへ投げる
- メディア毎に集計してグラフ化
用意するもの
Jupyter notebook
pandas
json
requests
matplotlib
BeautifulSoup
tqdm
Proofreading APIのAPI KEY
できたもの
1. Indeedに掲載している求人情報をメディア毎に収集(20件ずつ)
まずBeautifulSoupでIndeedから求人情報を抜きます。Indeedのhref属性を取得してリスト化する関数は以下です。ただ、今回もasciiのエンコードにハマってしまいました。
日本語URLでハマった時に参照した記事
http://qiita.com/mix/items/87d094414e46f857de45
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#!/usr/bin/env python3 from urllib.parse import urlparse import urllib.request, tqdm, csv from bs4 import BeautifulSoup def get_job_link(company): url = 'https://jp.indeed.com/m/jobs?q='+ company # 日本語URLでめちゃくちゃハマった p = urlparse(url) query = urllib.parse.quote_plus(p.query, safe='=&') url = '{}://{}{}{}{}{}{}{}{}'.format( p.scheme, p.netloc, p.path, ';' if p.params else '', p.params, '?' if p.query else '', query, '#' if p.fragment else '', p.fragment) ua = 'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3' req = urllib.request.Request(url, headers={'User-Agent': ua}) html = urllib.request.urlopen(req) soup = BeautifulSoup(html, "html.parser") jobindex = soup.find('div', attrs={'class': 'results'}) jobs = jobindex.find_all('a') job_link = [] limit = 1 for job in jobs: if 'sponsoredJob' not in job.attrs['class']: job_link.append(job['href']) limit += 1 if limit > 20: break return job_link |
いよいよA〜Eの求人情報のリンクリストを生成。実際は、アルバイトで有名な5社の名前を入れました。
1 2 3 4 5 6 |
company_name = ['A','B','C','D','E'] link_data = {} for i in company_name: job_link = get_job_link(i) link_data.update({i:job_link}) |
次は作ったlink_dataを使って求人情報のテキストをCSV化していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
for k in link_data.keys(): for v in tqdm.tqdm(link_data[k]): content_url = 'https://jp.indeed.com/m/viewjob?jk=' + v[2:] ua = 'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3' req = urllib.request.Request(content_url, headers={'User-Agent': ua}) html = urllib.request.urlopen(req) soup = BeautifulSoup(html, "html.parser") jobcontent = soup.find('div', attrs={'class': 'job'}) jobcontent_text = jobcontent.get_text().replace('n','') jobcontent_text # 書き出し f = open('content.csv', 'a') writer = csv.writer(f, lineterminator='n') csvlist = [] csvlist.append(k) csvlist.append(jobcontent_text) writer.writerow(csvlist) f.close() |
2. DataFrame化したあとに、Proofreading APIへ投げる
ProofreadingのAPIからGETでjsonを取得、alertsに格納されているリストの数を数えつつ、DataFrameに「アラート」を作って、それぞれの情報に数を格納していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
mport pandas as pd import requests, json, numpy df = pd.read_csv('content.csv', header=None, names=('メディア','本文')) df['アラート'] = numpy.NAN for sentence, num in tqdm.tqdm(zip(df['本文'], range(len(df['本文'])))): api_key= 'YOUR API KEY' api_url = 'https://api.a3rt.recruit-tech.co.jp/proofreading/v1/typo?apikey={}&sentence={}'.format(api_key, sentence[:500]) res = requests.get(api_url) content_json = json.loads(res.text) try: df['アラート'][num] = len(content_json['alerts']) except KeyError: pass |
1 |
df.describe() |
アラート | |
---|---|
count | 99.000000 |
mean | 16.848485 |
std | 7.559780 |
min | 5.000000 |
25% | 11.500000 |
50% | 15.000000 |
75% | 21.000000 |
max | 42.000000 |
一個あたり、alertが17個あって案外多いという感じです。
3. メディア毎に集計してグラフ化
A〜Eのdf[‘アラート’]をdf[‘メディア’]毎にgroupby()でくくって、pandasでplot。各社毎に特徴がでました。B社に感しては極端に少なかったのが意外でした。
1 2 3 4 5 6 7 |
%matplotlib inline import matplotlib.pyplot as plt df['アラート'].groupby(df['メディア']).mean().plot(kind='bar') plt.title('job content alert') plt.xlabel('media') |
ZoomやChatworkでファイル共有している方へ
リモートワークが一般的になってきた今「誰が」「どこで」「何を」ファイル共有しているのかしっかりと把握する必要があります。easyDBを利用すればセキュリティ上で安全なファイル共有をクラウド上で行えるだけでなく、ファイルのバージョン管理等も簡単にできます。
>>>リモートワーク時代の安全なファイル共有「easyDB」はこちら