ubuntu VLC が落ちるときの対処
ubuntu16.04 で動画から静止画切り出し
で以前静止画の取り出しをしたので
今回も行おうとしたが
VLC を起動し動画を再生しようとしても
落ちてしまう
を参考に
ツール > 設定
で
ビデオの出力を自動から
X11ビデオ出力(XCB)
にすることで解決
Just another WordPress site
ubuntu VLC が落ちるときの対処
ubuntu16.04 で動画から静止画切り出し
で以前静止画の取り出しをしたので
今回も行おうとしたが
VLC を起動し動画を再生しようとしても
落ちてしまう
を参考に
ツール > 設定
で
ビデオの出力を自動から
X11ビデオ出力(XCB)
にすることで解決
Word2Vec
テキスト解析して学習して
単語の意味をベクトル表現する方法
モデルは隠れ層と出力層の2層ニューラルネットワークになっている
Word2Vec を使うことで
ある単語や文章と似通った単語や文章を解析できる
例
コーパスにある単語の得微量ベクトルを学習し出力する
python で Word2Vec を使うには
gensim ライブラリをインストールする
1 | pip3 install gensim |
Mecab でコーパスを作成する
Word2Vec で類似語解析するには
テキストデータから
コーパス(基礎資料)を作成する必要がある
今回は明治以降の文学者15人のデータを wiki から取得し学習
まずはライブラリインストール
1 2 3 4 | import MeCab import requests from bs4 import BeautifulSoup |
次にターゲットURL指定
1 |
次に対象人物をリストで宣言
1 2 3 | names = [ "森鴎外" , "夏目漱石" , "島崎藤村" , "与謝野晶子" , "坪内逍遥" , "石川啄木" , "谷崎潤一郎" , "芥川龍之介" , "萩原朔太郎" , "川端康成" , "志賀直哉" , "中原中也" , "太宰治" , "大岡昇平" , "三島由紀夫" ] |
次に Mecab を分かち書きモードでインスタンス生成
コーパス(基礎資料)をいれるリストの宣言
1 2 | m = MeCab.Tagger( "-Owakati" ) corpus = [] |
ループ処理で
URL+キーワード
で項目のHTMLを取得
1 2 3 4 5 6 | for name in names: with requests.get(domain + name) as response: soup = BeautifulSoup(response.content, "html.parser" ) p_text = soup.find_all( "p" ) for p in p_text: corpus.append(m.parse(p.text).strip()) |
最後にコーパス(基礎資料)の結果を
data.txt に出力
1 2 | with open ( "data.txt" , "w" ) as file : file .write( "\n" .join(corpus)) |
全体ソースは
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import MeCab import requests from bs4 import BeautifulSoup names = [ "森鴎外" , "夏目漱石" , "島崎藤村" , "与謝野晶子" , "坪内逍遥" , "石川啄木" , "谷崎潤一郎" , "芥川龍之介" , "萩原朔太郎" , "川端康成" , "志賀直哉" , "中原中也" , "太宰治" , "大岡昇平" , "三島由紀夫" ] m = MeCab.Tagger( "-Owakati" ) corpus = [] for name in names: with requests.get(domain + name) as response: soup = BeautifulSoup(response.content, "html.parser" ) p_text = soup.find_all( "p" ) for p in p_text: corpus.append(m.parse(p.text).strip()) with open ( "data.txt" , "w" ) as file : file .write( "\n" .join(corpus)) |
となり
実行すると
data.txt が作成される
次に
data.txt を解析し学習モデルを生成
gensim から Word2Vec をインポート
1 | from gensim.models import word2vec |
次にファイルからコーパス(基礎資料)の読み込み
1 | corpus = file .read().splitlines() |
splitlines() を使うと改行コードをリストにするときに入れなくなる
python でファイルを read してリストにする時に、改行コードを入れない
https://qiita.com/suzuki-hoge/items/8eac60f7b68044eea6c1
を参考に
次にコーパス(基礎資料)を元に学習モデルを生成
1 2 | corpus = [sentence.split() for sentence in corpus] model = word2vec.Word2Vec(corpus,size = 200 ,min_count = 20 ,window = 10 ) |
次にモデルを元に似通ったキーワードをsy筒力
今回は文学と似通ったキーワードを出力
1 2 | similar_words = model.wv.most_similar(positive = [ "文学" ], topn = 9 ) print ( * [ " " .join([v , str ( "{:.2f}" . format (s))]) for v, s in similar_words], sep = "\n" ) |
全体ソースは
1 2 3 4 5 6 7 8 9 10 | from gensim.models import word2vec file = open ( "data.txt" ) corpus = file .read().splitlines() corpus = [sentence.split() for sentence in corpus] model = word2vec.Word2Vec(corpus,size = 200 ,min_count = 20 ,window = 10 ) similar_words = model.wv.most_similar(positive = [ "文学" ], topn = 9 ) print ( * [ " " .join([v , str ( "{:.2f}" . format (s))]) for v, s in similar_words], sep = "\n" ) |
結果は
1 2 3 4 5 6 7 8 9 | 物語 0.99 作 0.98 題材 0.98 代表 0.98 時代 0.97 評論 0.97 世界 0.97 描い 0.97 歌 0.96 |
となった
参考書籍とは違ったけど
年数が立っているので誤差範囲
1 | print ( * [ " " .join([v , str ( "{:.2f}" . format (s))]) for v, s in similar_words], sep = "\n" ) |
がわかりにくいので調べてみた
python {:.2f}
で検索したら
{インデックス番号:書式指定}
ということで
意味は下2桁で小数点タイプということ
これは format() の使い方であるということ
Pythonの文字列フォーマット(formatメソッドの使い方)
をみることで解決
なお今回のようにコーパス(基礎資料)作成
モデル構築
類似度の集計まで一気にやらず
モデル構築時点で一度ファイルに出力すれば
計算処理時間が縮小できる
1 | model.save( "data.model" ) |
全体ソースは
1 2 3 4 5 6 7 8 9 10 11 | from gensim.models import word2vec file = open ( "data.txt" ) corpus = file .read().splitlines() corpus = [sentence.split() for sentence in corpus] model = word2vec.Word2Vec(corpus,size = 200 ,min_count = 20 ,window = 10 ) model.save( "data.model" ) similar_words = model.wv.most_similar(positive = [ "文学" ], topn = 9 ) print ( * [ " " .join([v , str ( "{:.2f}" . format (s))]) for v, s in similar_words], sep = "\n" ) |
として実行すると
data.model が作成される
あとは学習済みモデルを読み込むには
1 | model.word2vec.Word2Vec.load( "data.model" ) |
でOKらしいので
word2vecmodel_data.py
を作成し
1 2 3 4 5 6 | from gensim.models import word2vec model = word2vec.Word2Vec.load( "data.model" ) similar_words = model.wv.most_similar(positive = [ "文学" ], topn = 9 ) print ( * [ " " .join([v , str ( "{:.2f}" . format (s))]) for v, s in similar_words], sep = "\n" ) |
で実行したら
1 2 3 4 5 6 7 8 9 | 物語 0.99 歌 0.99 古典 0.99 海 0.98 時代 0.98 近代 0.98 作 0.98 世界 0.97 歴史 0.97 |
と同じ結果になった
Word2Vecの学習済み日本語モデルを読み込んで使う
を参考に
参考書籍は
なお kindle Fire でみるときには
拡大しなくても見れるので
10インチがおすすめ
カバーがほしい場合には
マグネット機能で閉じたらOFFにしてくれる純正がおすすめ
Mecab と Word2Vec
Mecab と Word2Vec で自然言語解析ができる
スクレイピング結果から類似語を学習させる
Mecab は
日本語の形態素解析システム
日本語テキスト分析で
辞書データを元に単語を分割し
自動的に品詞分類する
インストールは
1 2 3 | sudo apt install mecab sudo apt install libmecab-dev sudo apt install mecab-ipadic-utf8 |
でインストール
1 | mecab |
で
mecab を起動できる
これで
すもももももももものうち
と入力すると
1 2 3 4 5 6 7 8 | すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ も 助詞,係助詞,*,*,*,*,も,モ,モ もも 名詞,一般,*,*,*,*,もも,モモ,モモ も 助詞,係助詞,*,*,*,*,も,モ,モ もも 名詞,一般,*,*,*,*,もも,モモ,モモ の 助詞,連体化,*,*,*,*,の,ノ,ノ うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ EOS |
というように品詞分類できる
次に標準のIPA辞書だと固有名詞に弱いので
拡張辞書をインストール
1 2 3 | git clone --depth 1 https: //github .com /neologd/mecab-ipadic-neologd .git cd mecab-ipadic-neologd/ sudo . /bin/install-mecab-ipadic-neologd |
を実行し
yes を入力すればインストールできる
なお
–depth 1 をつかうことで
直近の履歴のみ clone できる
【GIT】非常に重たいrepositoryをcloneする方法
を参考に
次に python の mecab ライブラリーをインストール
1 2 | cd - pip3 install mecab-python3 |
cd –
とすると1つ前のディレクトリに戻ることができる
今回は cd で git clone したディレクトリに移動していたので使用
次に python でmecab による品詞分類コードの実装
1 | import Mecab |
でライブラリをインポート
Mecab.Target() でインスタンスを生成
1 | m = Mecab.Target() |
あとは解析
1 | vim sumomo.py |
でファイルを作成
1 2 3 4 | import MeCab m = MeCab.Tagger() print (m.parse( "すもももももももものうち" )) |
とすると
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 38 39 40 41 42 43 44 45 | Failed initializing MeCab. Please see the README for possible solutions: https: //github .com /SamuraiT/mecab-python3 #common-issues If you are still having trouble, please file an issue here, and include the ERROR DETAILS below: https: //github .com /SamuraiT/mecab-python3/issues issueを英語で書く必要はありません。 ------------------- ERROR DETAILS ------------------------ arguments: error message: [ifs] no such file or directory: /usr/local/etc/mecabrc ---------------------------------------------------------- Traceback (most recent call last): File "sumomo.py" , line 2, in <module> m=MeCab.Tagger() File "/home/snowpool/anaconda3/lib/python3.6/site-packages/MeCab/__init__.py" , line 124, in __init__ super(Tagger, self).__init__(args) RuntimeError snowpool@snowpool-Prime-Series:~ /scraping $ vim sumomo.py snowpool@snowpool-Prime-Series:~ /scraping $ python sumomo.py Failed initializing MeCab. Please see the README for possible solutions: https: //github .com /SamuraiT/mecab-python3 #common-issues If you are still having trouble, please file an issue here, and include the ERROR DETAILS below: https: //github .com /SamuraiT/mecab-python3/issues issueを英語で書く必要はありません。 ------------------- ERROR DETAILS ------------------------ arguments: error message: [ifs] no such file or directory: /usr/local/etc/mecabrc ---------------------------------------------------------- Traceback (most recent call last): File "sumomo.py" , line 3, in <module> m=MeCab.Tagger() File "/home/snowpool/anaconda3/lib/python3.6/site-packages/MeCab/__init__.py" , line 124, in __init__ super(Tagger, self).__init__(args) RuntimeError |
となってしまう
Failed initializing MeCab. Please see the README for possible solutions: https://github.com/SamuraiT/mecab-python3#common-issues
で検索し
を参考に
1 | which mecab |
でパスを確認
1 | /usr/bin/mecab |
になっているのを確認
1 | vim ~/.bashrc |
でファイルを開き
最終行まで
shit+g で移動
1 | export MECABRC= /etc/mecabrc |
を追記し保存
1 | source ~/.bashrc |
としたけどダメ
一度元にもどし
を参考に
1 | pip install unidic-lite |
【Ubuntu】MeCabとNEologdをインストールしてPythonで形態素解析する
を参考に
1 | echo `mecab-config --dicdir` "/mecab-ipadic-neologd" |
でディレクトリパスを確認すると
1 | /usr/lib/mecab/dic/mecab-ipadic-neologd |
となる
Ubuntu 16.04 LTS で MeCab を NEologd とともにインストールする
を参考に
1 | sudo vim /etc/mecabrc |
でファイルを開き
6行目の
1 | dicdir = /var/lib/mecab/dic/debian |
の部分を
1 2 | ;dicdir = /var/lib/mecab/dic/debian dicdir = /usr/lib/mecab/dic/mecab-ipadic-neologd |
として保存
これで
1 | echo "幽☆遊☆白書" | mecab |
を実行すると
1 2 | 幽☆遊☆白書 名詞,固有名詞,一般,*,*,*,幽☆遊☆白書,ユウユウハクショ,ユウユウハクショ EOS |
となり分解できているのがわかる
なお辞書の設定をしないと
1 2 3 4 5 6 | 幽 形容詞,自立,*,*,形容詞・アウオ段,ガル接続,幽い,カソケ,カソケ ☆ 記号,一般,*,*,*,*,☆,☆,☆ 遊 名詞,固有名詞,組織,*,*,*,* ☆ 記号,一般,*,*,*,*,☆,☆,☆ 白書 名詞,一般,*,*,*,*,白書,ハクショ,ハクショ EOS |
というようになった
これで辞書が使えるようになったので
1 | python sumomo.py |
を実行すると
1 2 3 4 5 6 7 8 | すもも スモモ スモモ 李 名詞-普通名詞-一般 0 も モ モ も 助詞-係助詞 もも モモ モモ 桃 名詞-普通名詞-一般 0 も モ モ も 助詞-係助詞 もも モモ モモ 桃 名詞-普通名詞-一般 0 の ノ ノ の 助詞-格助詞 うち ウチ ウチ 内 名詞-普通名詞-副詞可能 0 EOS |
というように分類できているのがわかる
参考書籍は
なお kindle Fire でみるときには
拡大しなくても見れるので
10インチがおすすめ
カバーがほしい場合には
マグネット機能で閉じたらOFFにしてくれる純正がおすすめ
scrapy
scrapy は
スクレイピング
クローリングの
フレームワーク
インストールは
1 | pip3 install scrapy |
これをつかってはてな匿名ダイアリーのプロジェクトを作成
通称は
増田
らしい
このURLである
https://anond.hatelabo.jp/
をクロールする
1 | scrapy startproject anond |
というように
scrapy startproject プロジェクト名
で
プロジェクトを作成
1 | cd anond/ |
で移動
1 | sudo apt install tree |
で
treeコマンドをインストール
1 | tree |
で構成をみると
1 2 3 4 5 6 7 8 9 10 | . ├── anond │ ├── __init__.py │ ├── items.py │ ├── middlewares.py │ ├── pipelines.py │ ├── settings.py │ └── spiders │ └── __init__.py └── scrapy.cfg |
となっているのがわかる
次に
scrapy に
はてな匿名ダイアリーを設定
settings.py でクロール間隔の調整
デフォルトだと間隔0秒で最大16リクエストになるので
負荷がかかる
なので平均1秒あけるようにしてダウンロードするようにする
1 | vim anond /settings .py |
でファイルを開き
28行目の
1 | #DOWNLOAD_DELAY = 3 |
の部分を
1 | DOWNLOAD_DELAY = 1 |
と変更し保存
次にitem.py を編集し
URLのみ取得するように
url = scrapy.Field() を追記するので
1 | vim anond /items .py |
でファイルをひらき
1 2 3 4 | class AnondItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() pass |
の部分を
1 2 3 4 5 | class AnondItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() url = scrapy.Field() pass |
として保存
次に Spider の作成
コマンド実行時に
第1引数に スパイダーの名前
今回は abibd_spider
第2引数に ドメインを指定
今回なら anond.hatelabo.jp
となる
1 | scrapy genspider anond_spider anond.hatelabo.jp |
実行したあとに
1 | tree |
を実行すると
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | . ├── anond │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-36.pyc │ │ └── settings.cpython-36.pyc │ ├── items.py │ ├── middlewares.py │ ├── pipelines.py │ ├── settings.py │ └── spiders │ ├── __init__.py │ ├── __pycache__ │ │ └── __init__.cpython-36.pyc │ └── anond_spider.py └── scrapy.cfg |
という構造になっているのがわかる
次にはてな匿名ダイアリーのURL抽出処理の実装
1 | vim anond /spiders/anond_spider .py |
でファイルをひらき
7行目のURLが http になっているので
https に変更する
1 |
次にパースしたときの処理を追記
今回はパーマリンクURL をたどるように設定
9行目からの
1 2 | def parse( self , response): pass |
を
1 2 3 4 | def parse( self , response): for url in response.css( 'p.sectionfooter a::attr("href")' ): yield response.follow(url) pass |
へ変更
これで準備できたので実行
1 | scrapy crawl anond_spider |
これでクローリングが実行され
URLの取得ができる
参考書籍は
なお kindle Fire でみるときには
拡大しなくても見れるので
10インチがおすすめ
カバーがほしい場合には
マグネット機能で閉じたらOFFにしてくれる純正がおすすめ
webdriver_manager
webdriver_manager ライブラリーを使うと
python 実行時に使用しているブラウザのバージョンにあった
WebDriver をインストールできるので
毎回バージョンを合わせなくてもよくなる
インストールは
1 | pip3 install webdriver_manager |
でインストールできる
あとは
1 2 3 4 | from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(ChromeDriverManager().install()) |
とすれば
自動的にバージョンに応じた webdriver がインストールされる
ubuntu のアップデートで
Chrome のバージョンが更新されても
これで対応可能
これでスクレイピングで検索する例を書くと
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager import time keyword = "スクレイピング" driver = webdriver.Chrome(ChromeDriverManager().install()) driver.get(url) time.sleep( 3 ) search = driver.find_element_by_name( "q" ) search.send_keys(keyword) search.submit() time.sleep( 5 ) driver.quit() |
となる
参考書籍は
なお kindle Fire でみるときには
拡大しなくても見れるので
10インチがおすすめ
カバーがほしい場合には
マグネット機能で閉じたらOFFにしてくれる純正がおすすめ
ubuntu へ tor コマンドをいれる
tor コマンド ubuntu 16.04
で検索し
Ubuntu Server 16.04 LTS/CentOS 7にtorをインストールしてtor経由でcurlやwgetを使用する
を参考にインストール
1 | sudo apt install tor |
でインストール
次に
python から tor のSOCKSポートにアクセスするため
pysocks ライブラリーのインストール
1 | pip3 install pysocks |
次に
Squid プロキシ経由アクセスのように
ローカルの tor の SOCKS ポートをプロキシ接続するようにする
1 | vim proxy.py |
でファイル作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import requests proxy = { } ip = requests.get(url).text tor_ip = requests.get(url,proxies = proxy).text print ( "current IP is " + ip) print ( "tor IP is " + tor_ip) |
これで
1 | python proxy.py |
を実行すると
グローバルIP
tor を使ったときのIP
が表示される
によれば
tor はプロキシとして
socks5://localhost:9050
を使っているとのこと