ubuntu VLC が落ちるときの対処

ubuntu VLC が落ちるときの対処

ubuntu16.04 で動画から静止画切り出し
で以前静止画の取り出しをしたので
今回も行おうとしたが
VLC を起動し動画を再生しようとしても
落ちてしまう

VLC で動画再生に問題

を参考に

ツール > 設定

ビデオの出力を自動から
X11ビデオ出力(XCB)
にすることで解決

Word2Vec

Word2Vec

テキスト解析して学習して
単語の意味をベクトル表現する方法

モデルは隠れ層と出力層の2層ニューラルネットワークになっている

Word2Vec を使うことで
ある単語や文章と似通った単語や文章を解析できる


コーパスにある単語の得微量ベクトルを学習し出力する

python で Word2Vec を使うには
gensim ライブラリをインストールする

pip3 install gensim

Mecab でコーパスを作成する

Word2Vec で類似語解析するには
テキストデータから
コーパス(基礎資料)を作成する必要がある

今回は明治以降の文学者15人のデータを wiki から取得し学習

まずはライブラリインストール

import MeCab
import requests

from bs4 import BeautifulSoup

次にターゲットURL指定

domain ="https://ja.wikipedia.org/wiki/"

次に対象人物をリストで宣言

names =["森鴎外","夏目漱石","島崎藤村","与謝野晶子","坪内逍遥","石川啄木",
        "谷崎潤一郎","芥川龍之介","萩原朔太郎","川端康成","志賀直哉","中原中也",
        "太宰治","大岡昇平","三島由紀夫"]

次に Mecab を分かち書きモードでインスタンス生成
コーパス(基礎資料)をいれるリストの宣言

m=MeCab.Tagger("-Owakati")
corpus =[]

ループ処理で
URL+キーワード
で項目のHTMLを取得

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 に出力

with open("data.txt","w") as file:                      
    file.write("\n".join(corpus))

全体ソースは

import MeCab
import requests
from bs4 import BeautifulSoup

domain="https://ja.wikipedia.org/wiki/"

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 をインポート

from gensim.models import word2vec

次にファイルからコーパス(基礎資料)の読み込み

corpus = file.read().splitlines()

splitlines() を使うと改行コードをリストにするときに入れなくなる
python でファイルを read してリストにする時に、改行コードを入れない
https://qiita.com/suzuki-hoge/items/8eac60f7b68044eea6c1
を参考に

次にコーパス(基礎資料)を元に学習モデルを生成

corpus =[sentence.split() for sentence in corpus]
model = word2vec.Word2Vec(corpus,size=200,min_count=20,window=10)

次にモデルを元に似通ったキーワードをsy筒力

今回は文学と似通ったキーワードを出力

similar_words = model.wv.most_similar(positive=["文学"], topn=9)
print(*[" ".join([v ,str("{:.2f}".format(s))]) for v, s in similar_words], sep="\n")

全体ソースは

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")

結果は

物語 0.99
作 0.98
題材 0.98
代表 0.98
時代 0.97
評論 0.97
世界 0.97
描い 0.97
歌 0.96

となった

参考書籍とは違ったけど
年数が立っているので誤差範囲

print(*[" ".join([v ,str("{:.2f}".format(s))]) for v, s in similar_words], sep="\n")

がわかりにくいので調べてみた

python {:.2f}
で検索したら
{インデックス番号:書式指定}
ということで

意味は下2桁で小数点タイプということ

これは format() の使い方であるということ

Pythonの文字列フォーマット(formatメソッドの使い方)

をみることで解決

なお今回のようにコーパス(基礎資料)作成
モデル構築
類似度の集計まで一気にやらず
モデル構築時点で一度ファイルに出力すれば
計算処理時間が縮小できる

model.save("data.model")

全体ソースは

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 が作成される

あとは学習済みモデルを読み込むには

model.word2vec.Word2Vec.load("data.model")

でOKらしいので

word2vecmodel_data.py
を作成し

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")

で実行したら

物語 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 と Word2Vec で自然言語解析ができる

スクレイピング結果から類似語を学習させる

Mecab は
日本語の形態素解析システム

日本語テキスト分析で
辞書データを元に単語を分割し
自動的に品詞分類する

インストールは

sudo apt install mecab
sudo apt install libmecab-dev 
 sudo apt install mecab-ipadic-utf8 

でインストール

mecab


mecab を起動できる

これで
すもももももももものうち
と入力すると

すもも	名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も	助詞,係助詞,*,*,*,*,も,モ,モ
もも	名詞,一般,*,*,*,*,もも,モモ,モモ
も	助詞,係助詞,*,*,*,*,も,モ,モ
もも	名詞,一般,*,*,*,*,もも,モモ,モモ
の	助詞,連体化,*,*,*,*,の,ノ,ノ
うち	名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS

というように品詞分類できる

次に標準のIPA辞書だと固有名詞に弱いので
拡張辞書をインストール

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 ライブラリーをインストール

cd -
pip3 install mecab-python3

cd –
とすると1つ前のディレクトリに戻ることができる

今回は cd で git clone したディレクトリに移動していたので使用

次に python でmecab による品詞分類コードの実装

import Mecab

でライブラリをインポート

Mecab.Target() でインスタンスを生成

m = Mecab.Target()

あとは解析

vim sumomo.py

でファイルを作成

import MeCab
m=MeCab.Tagger()

print(m.parse("すもももももももものうち"))

とすると

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
で検索し

MeCabをローカルにインストールして躓いた時に見て欲しい

を参考に

which mecab

でパスを確認

/usr/bin/mecab

になっているのを確認

vim ~/.bashrc 

でファイルを開き
最終行まで
shit+g で移動

export MECABRC=/etc/mecabrc

を追記し保存

source ~/.bashrc 

としたけどダメ

一度元にもどし

mecab-python3 1.0.3

を参考に

pip install unidic-lite

【Ubuntu】MeCabとNEologdをインストールしてPythonで形態素解析する

を参考に

echo `mecab-config --dicdir`"/mecab-ipadic-neologd"

でディレクトリパスを確認すると

/usr/lib/mecab/dic/mecab-ipadic-neologd

となる

Ubuntu 16.04 LTS で MeCab を NEologd とともにインストールする

を参考に

sudo vim /etc/mecabrc 

でファイルを開き

6行目の

dicdir = /var/lib/mecab/dic/debian

の部分を

;dicdir = /var/lib/mecab/dic/debian
dicdir = /usr/lib/mecab/dic/mecab-ipadic-neologd

として保存

これで

echo "幽☆遊☆白書" | mecab

を実行すると

幽☆遊☆白書	名詞,固有名詞,一般,*,*,*,幽☆遊☆白書,ユウユウハクショ,ユウユウハクショ
EOS

となり分解できているのがわかる

なお辞書の設定をしないと

幽	形容詞,自立,*,*,形容詞・アウオ段,ガル接続,幽い,カソケ,カソケ
☆	記号,一般,*,*,*,*,☆,☆,☆
遊	名詞,固有名詞,組織,*,*,*,*
☆	記号,一般,*,*,*,*,☆,☆,☆
白書	名詞,一般,*,*,*,*,白書,ハクショ,ハクショ
EOS

というようになった

これで辞書が使えるようになったので

python sumomo.py 

を実行すると

すもも	スモモ	スモモ	李	名詞-普通名詞-一般			0
も	モ	モ	も	助詞-係助詞			
もも	モモ	モモ	桃	名詞-普通名詞-一般			0
も	モ	モ	も	助詞-係助詞			
もも	モモ	モモ	桃	名詞-普通名詞-一般			0
の	ノ	ノ	の	助詞-格助詞			
うち	ウチ	ウチ	内	名詞-普通名詞-副詞可能			0
EOS

というように分類できているのがわかる

参考書籍は

なお kindle Fire でみるときには
拡大しなくても見れるので
10インチがおすすめ

カバーがほしい場合には
マグネット機能で閉じたらOFFにしてくれる純正がおすすめ

scrapy

scrapy

scrapy は
スクレイピング
クローリングの
フレームワーク

インストールは

 pip3 install scrapy

これをつかってはてな匿名ダイアリーのプロジェクトを作成

通称は
増田
らしい

このURLである
https://anond.hatelabo.jp/
をクロールする

scrapy startproject anond

というように
scrapy startproject プロジェクト名

プロジェクトを作成

cd anond/

で移動

sudo apt install tree


treeコマンドをインストール

tree

で構成をみると

.
├── anond
│   ├── __init__.py
│   ├── items.py
│   ├── middlewares.py
│   ├── pipelines.py
│   ├── settings.py
│   └── spiders
│       └── __init__.py
└── scrapy.cfg

となっているのがわかる

次に
scrapy に
はてな匿名ダイアリーを設定

settings.py でクロール間隔の調整
デフォルトだと間隔0秒で最大16リクエストになるので
負荷がかかる

なので平均1秒あけるようにしてダウンロードするようにする

vim anond/settings.py 

でファイルを開き
28行目の

#DOWNLOAD_DELAY = 3

の部分を

DOWNLOAD_DELAY = 1

と変更し保存

次にitem.py を編集し
URLのみ取得するように
url = scrapy.Field() を追記するので

vim anond/items.py 

でファイルをひらき

class AnondItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    pass

の部分を

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
となる

scrapy genspider anond_spider anond.hatelabo.jp

実行したあとに

tree

を実行すると

.
├── 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抽出処理の実装

vim anond/spiders/anond_spider.py 

でファイルをひらき

7行目のURLが http になっているので
https に変更する

start_urls = ['https://anond.hatelabo.jp/']

次にパースしたときの処理を追記
今回はパーマリンクURL をたどるように設定

9行目からの

    def parse(self, response):
        pass

    def parse(self, response):
        for url in response.css('p.sectionfooter a::attr("href")'):
            yield response.follow(url)
        pass

へ変更

これで準備できたので実行

scrapy crawl anond_spider

これでクローリングが実行され
URLの取得ができる

参考書籍は

なお kindle Fire でみるときには
拡大しなくても見れるので
10インチがおすすめ

カバーがほしい場合には
マグネット機能で閉じたらOFFにしてくれる純正がおすすめ

webdriver_manager

webdriver_manager

webdriver_manager ライブラリーを使うと
python 実行時に使用しているブラウザのバージョンにあった
WebDriver をインストールできるので
毎回バージョンを合わせなくてもよくなる

インストールは

pip3 install webdriver_manager

でインストールできる

あとは

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

driver=webdriver.Chrome(ChromeDriverManager().install())

とすれば
自動的にバージョンに応じた webdriver がインストールされる

ubuntu のアップデートで
Chrome のバージョンが更新されても
これで対応可能

これでスクレイピングで検索する例を書くと

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
import time

url="https://www.google.com/"
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 コマンドをいれる

ubuntu へ tor コマンドをいれる

tor コマンド ubuntu 16.04
で検索し

Ubuntu Server 16.04 LTS/CentOS 7にtorをインストールしてtor経由でcurlやwgetを使用する

を参考にインストール

sudo apt install tor

でインストール

次に
python から tor のSOCKSポートにアクセスするため
pysocks ライブラリーのインストール

pip3 install pysocks

次に
Squid プロキシ経由アクセスのように
ローカルの tor の SOCKS ポートをプロキシ接続するようにする

vim proxy.py

でファイル作成

import requests

proxy = {
        "http":"socks5://127.0.0.1:9050",
        "https":"socks5://127.0.0.1:9050"
        }

url = "http://httpbin.org/ip"

ip=requests.get(url).text
tor_ip=requests.get(url,proxies=proxy).text

print("current IP is " + ip)
print("tor IP is "+tor_ip)

これで

python  proxy.py

を実行すると
グローバルIP
tor を使ったときのIP
が表示される

Torを用いたスクレイピング [Python]

によれば
tor はプロキシとして
socks5://localhost:9050
を使っているとのこと