ubuntu VLC が落ちるときの対処

ubuntu VLC が落ちるときの対処

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

VLC で動画再生に問題

を参考に

ツール > 設定

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

Word2Vec

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

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

を参考に

1
which mecab

でパスを確認

1
/usr/bin/mecab

になっているのを確認

1
vim ~/.bashrc

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

1
export MECABRC=/etc/mecabrc

を追記し保存

1
source ~/.bashrc

としたけどダメ

一度元にもどし

mecab-python3 1.0.3

を参考に

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

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

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 コマンドをいれる

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 = {
        "http":"socks5://127.0.0.1:9050",
        "https":"socks5://127.0.0.1:9050"
        }
 
 
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を用いたスクレイピング [Python]

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