초보자를 위한 LDA 테마 모델의 실천

입문


이 글은 화제의 모형을 처음 사용한 사람이라 어쨌든 복제품으로 움직이는 것을 보고 싶다!이런 사람을 목표로
이렇게 말하는 나의 경험은 아직 매우 얕은데, 잘못을 포함할 가능성이 높다는 것을 생각하면 매우 좋다.
이번 실천은 아래의 보도에 따라 실천한 것에 대해 보충한 것이다.만약 이 문장에 이해하지 못하는 부분이 있다면, 원 보도를 참조하십시오.
LDA 기반 테마 모델 with gensim~Qiita의 라벨에서 사용자의 기호를 고려합니다~
https://qiita.com/shizuma/items/44c016812552ba8a8b88
이번 실천에서 필요한 소프트웨어 패키지는 이미 설치된 전제 조건이다.
패키지가 없는 사람은 필요에 따라 pip 명령 등으로 설치하십시오.특히 LDA를 사용하는 gensim은 다음 명령을 통해 설치할 수 있습니다.$ pip install gensim

소스 코드 수정


이번에 나는 상술한 보도와 마찬가지로 시험해 보았다.여기서 기본 소스 코드를 가져오십시오.
이 보도 자체가 오래된 보도이기 때문에 규격이 좀 바뀐 것 같다.
구체적으로 말하면 두 번째 파일의 아래 부분을 최신으로 동작시켰다.target_url = 'https://qiita.com/api/v2/users/' + user[1] + '/following_tags'tag['name']을 tag['id]로 변경해야 합니다.
또 1000인분을 실행하는 데 시간이 오래 걸릴 수 있고 API 상한선에 끌릴 수 있기 때문에 10인분을 끝내기로 했다.
이것은 두 번째 파일의 수정된 원본 코드입니다.

import csv, requests, os.path, time

# 先程のユーザーデータを使います。
f = open('qiita_users.csv', 'r')
reader = csv.reader(f)
next(reader)

qiita_tags = []
qiita_user_tags = []

# CSVのユーザーデータの個数を取得します。(1回目は関係なし)
if os.path.isfile('qiita_user_tags.csv'):
    user_tag_num = sum(1 for line in open('qiita_user_tags.csv'))
else:
    user_tag_num = 0

# CSVのタグデータが既にあればそのタグデータを取得(1回目は関係なし)
if os.path.isfile('qiita_tags.csv'):
    f_tag = open('qiita_tags.csv', 'r')
    reader_tag = csv.reader(f_tag)
    qiita_tags = [tag[0] for tag in reader_tag]

# CSVファイルをオープン
f_tag = open('qiita_tags.csv', 'w')
writer_tag = csv.writer(f_tag, lineterminator='\n')
f_user_tag = open('qiita_user_tags.csv', 'a')
writer_user_tag = csv.writer(f_user_tag, lineterminator='\n')

# ユーザーごとにAPIを叩く
for user in reader:
    if int(user[0]) > 10:
        break
    if user_tag_num < int(user[0]):
        target_url = 'https://qiita.com/api/v2/users/' + user[1] + '/following_tags'
        print('scraping: ' + user[0] + ', name:' + user[1])
        # エラーチェック (リクエスト数のオーバー、ユーザーが存在しないの2点が出る)
        try:
            result = requests.get(target_url)
        except requests.exceptions.HTTPError as e:
            print(e)
            break
        target = result.json()

        # リクエスト数オーバーのときは諦める
        if 'error' in target:
            print(target['error'])
            if target['error'] == 'Rate limit exceeded.':
                break
            continue

        # user_id, tag_1, tag_2, ... のようにデータを入れる
        qiita_user_tag = [int(user[0])]
        for tag in target:
            print('tag: ')
            print(tag['id'])
            if tag['id'] in qiita_tags:
                qiita_user_tag.append(qiita_tags.index(tag['id']) + 1)
            else:
                qiita_tags.append(tag['id'])
                tag_num = len(qiita_tags)
                qiita_user_tag.append(tag_num)
        qiita_user_tags.append(qiita_user_tag)
        time.sleep(1) # サーバーに負荷をかけ過ぎないように1秒間隔を空ける

# データをCSVに吐き出す
for tag in qiita_tags:
    writer_tag.writerow([tag])
writer_user_tag.writerows(qiita_user_tags)

f_tag.close()
f_user_tag.close()
f.close()

결과 정보


그렇다면 집행하면 다음과 같은 결과를 얻을 수 있다.잘 움직이는 것 같아.
화제 속에는 Go와 머신러닝 등 최근의 단어들이 많이 추출되어 참고기사로 작성된 2년 전과 시대의 변화가 느껴진다.
줄은 각 주제를 대표한다.
한 마디로 하면 사용자를 주목하는 라벨로 15조로 나누면 각 조가 중시하는 단어를 알고 있다는 인상을 준다.
테마 수는 세 번째 파일의 다음 줄에 지정됩니다.lda = gensim.models.ldamodel.LdaModel(corpus=corpus, num_topics=15)

분석 결과


행은 각 주제를 나타내고 열은 왼쪽으로 갈수록 중요합니다undefined

이것은 탭 1과 탭 2에 관심을 가진 사용자가 어느 주제에 속하는지에 대한 수치화입니다. 이것은 7입니다.

좋은 웹페이지 즐겨찾기