J'ai créé un nuage de mots comme celui-ci. J'ai simplement extrait le titre de qiita.com de l'historique du navigateur, divisé le titre avec Mecab et converti uniquement la nomenclature en Word Cloud pour visualiser les champs qui m'intéressaient, les champs que j'ai recherchés, etc. C'était assez intéressant de visualiser mon histoire, alors essayez-le.
Https://github.com/amueller/word_cloud en tant que bibliothèque Word Cloud pour la visualisation. Pour l'analyse morphologique, préparez Mecab en vous référant à Rendre le moteur d'analyse morphologique MeCab disponible en Python3 (version de mars 2016).
Pour MacOS, Safari est dans ~ / Library / Safari / History.db
et Chrome est dans ~ / Library / Application \ Support / Google / Chrome / Default / History
, copiez-les comme suit. Au même endroit que le script. Même si vous spécifiez ce chemin directement comme chemin de db sans le copier, il peut ne pas être lu en raison d'une erreur de lecture, il est donc prudent de le copier compte tenu du risque de corruption de la base de données dans l'opération.
À propos, le script pour créer WordCloud de Qiita à partir de l'historique du navigateur est le suivant.
import sqlite3
from enum import Enum
import MeCab
from wordcloud import WordCloud
#db copie l'original et utilise
# Safari History
# => ~/Library/Safari/History.db
# Chrome History
# => ~/Library/Application\ Support/Google/Chrome/Default/History
SAFARI_HISTORY = 'History.db'
CHROME_HISTORY = 'History'
class Browser(Enum):
Safari = 1
Chrome = 2
MECAB = MeCab.Tagger('-Ochasen')
MECAB.parse('') #Ne soyez pas libéré
def get_nouns(text):
nouns = []
node = MECAB.parseToNode(text)
while node:
if 'nom' in node.feature:
nouns.append(node.surface)
node = node.next
if node is None:
break
return nouns
def get_db_config(browser):
if browser == Browser.Safari:
dbname = SAFARI_HISTORY
sql = 'select v.title from history_items i join history_visits v on v.history_item = i.id and i.url like "http://qiita.com%" group by i.url'
elif browser == Browser.Chrome:
dbname = CHROME_HISTORY
sql = 'select u.title from urls u where u.url like "http://qiita.com%" group by u.url'
else:
raise ValueError('invalid argument')
return (dbname, sql)
def get_qiitas(browser):
qiitas = []
(dbname, sql) = get_db_config(browser)
for row in sqlite3.connect(dbname).cursor().execute(sql):
if row[0]:
qiitas.append(row[0].strip())
return qiitas
def create_wordcloud(text, output):
fpath = '/Library/Fonts/Hiragino Marugo ProN W4.ttc'
stop_words = ['chose', 'cette', 'Pour', 'Quand', 'Yo']
wordcloud = WordCloud(background_color='white', font_path=fpath, width=900, height=500,
stopwords=set(stop_words)).generate(text)
wordcloud.to_file(output)
def main():
qiita_nouns = []
for browser in [Browser.Chrome, Browser.Safari, ]:
for title in get_qiitas(browser):
qiita_nouns.extend(get_nouns(title))
create_wordcloud(','.join(qiita_nouns), 'qiita.png')
if __name__ == '__main__':
main()
Il s'est avéré être quelque chose comme ça. L'historique de Safari et de Chrome est stocké dans sqlite3, de sorte que les données sont extraites de manière appropriée. Malheureusement, les schémas sont complètement différents, donc sql doit être séparé. De plus, puisque le titre de l'article Qiita contient toujours la chaîne "Qiita", Qiita est affiché très fortement dans Word Cloud, alors ajoutez "qiita" en lettres minuscules à stop_words pour le supprimer. Vous pouvez. Personnellement, je peux clairement l'identifier comme Qiita, alors je le laisse.
Encore une fois, c'était assez intéressant de visualiser mon histoire, alors essayez-le!
Recommended Posts