ubuntu VLC が落ちるときの対処
ubuntu16.04 で動画から静止画切り出し
で以前静止画の取り出しをしたので
今回も行おうとしたが
VLC を起動し動画を再生しようとしても
落ちてしまう
を参考に
ツール > 設定
で
ビデオの出力を自動から
X11ビデオ出力(XCB)
にすることで解決
Just another WordPress site
ubuntu VLC が落ちるときの対処
ubuntu16.04 で動画から静止画切り出し
で以前静止画の取り出しをしたので
今回も行おうとしたが
VLC を起動し動画を再生しようとしても
落ちてしまう
を参考に
ツール > 設定
で
ビデオの出力を自動から
X11ビデオ出力(XCB)
にすることで解決
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 は
日本語の形態素解析システム
日本語テキスト分析で
辞書データを元に単語を分割し
自動的に品詞分類する
インストールは
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
で検索し
を参考に
which mecab
でパスを確認
/usr/bin/mecab
になっているのを確認
vim ~/.bashrc
でファイルを開き
最終行まで
shit+g で移動
export MECABRC=/etc/mecabrc
を追記し保存
source ~/.bashrc
としたけどダメ
一度元にもどし
を参考に
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 は
スクレイピング
クローリングの
フレームワーク
インストールは
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 ライブラリーを使うと
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 コマンドをいれる
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 はプロキシとして
socks5://localhost:9050
を使っているとのこと