Neo4jをインストールする

オープンソースカンファレンス2020春でネットワーク型データベースのNeo4jが紹介されていたので遊んでみたくなった。

インストールマニュアルはこちら。
https://neo4j.com/docs/operations-manual/current/installation/linux/debian/

以下、メモ

JavaのOpenJDKバージョンの確認

:~$ update-java-alternatives --list
java-1.11.0-openjdk-amd64 1111 /usr/lib/jvm/java-1.11.0-openjdk-amd64
java-1.8.0-openjdk-amd64 1081 /usr/lib/jvm/java-1.8.0-openjdk-amd64

デフォルトのOpenJDKを設定

:~$ sudo update-java-alternatives --jre --set java-1.11.0-openjdk-amd64

APTリポジトリの追加

:~$ wget -O - https://debian.neo4j.com/neotechnology.gpg.key | sudo apt-key add -
--2020-04-26 12:07:40-- https://debian.neo4j.com/neotechnology.gpg.key
debian.neo4j.com (debian.neo4j.com) をDNSに問いあわせています... 99.86.32.2, 99.86.32.80, 99.86.32.102, ...
debian.neo4j.com (debian.neo4j.com)|99.86.32.2|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 6342 (6.2K) [application/pgp-keys]
`STDOUT' に保存中

- 100%[===================>] 6.19K --.-KB/s 時間 0s

2020-04-26 12:07:41 (218 MB/s) - stdout へ出力完了 [6342/6342]

OK

リポジトリの追加

:~$ echo 'deb https://debian.neo4j.com stable 4.0' | sudo tee -a /etc/apt/sources.list.d/neo4j.list
deb https://debian.neo4j.com stable 4.0

いつものやつ

:~$ sudo apt update

取得:14 https://debian.neo4j.com stable InRelease [22.9 kB]
取得:15 https://debian.neo4j.com stable/4.0 i386 Packages [1,771 B]
取得:16 https://debian.neo4j.com stable/4.0 amd64 Packages [1,771 B]
27.2 kB を 6秒 で取得しました (4,526 B/s)
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
パッケージはすべて最新です。

Neo4jのAPTリスト

:~$ apt list -a neo4j
一覧表示... 完了
neo4j/stable,stable 1:4.0.3 all
neo4j/stable,stable 1:4.0.2 all
neo4j/stable,stable 1:4.0.1 all
neo4j/stable,stable 1:4.0.0 all

最新版を指定してインストール

:~$ sudo apt install neo4j=1:4.0.3
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
gir1.2-keybinder-3.0 libjs-modernizr libjs-underscore libkeybinder-3.0-0
libqt5designer5 libqt5help5 libqt5multimedia5 libqt5multimediawidgets5
libqt5positioning5 libqt5qml5 libqt5quick5 libqt5sensors5 libqt5webchannel5
libqt5webkit5 linux-headers-4.15.0-91 linux-headers-4.15.0-91-generic
linux-image-4.15.0-91-generic linux-modules-4.15.0-91-generic
linux-modules-extra-4.15.0-91-generic python-gst-1.0 python-lxml
python3-pyqt5 python3-pyqt5.qtmultimedia python3-pyqt5.qtopengl
python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-qtpy
これを削除するには 'sudo apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
cypher-shell daemon
以下のパッケージが新たにインストールされます:
cypher-shell daemon neo4j
アップグレード: 0 個、新規インストール: 3 個、削除: 0 個、保留: 0 個。
102 MB のアーカイブを取得する必要があります。
この操作後に追加で 116 MB のディスク容量が消費されます。
続行しますか? [Y/n]
取得:1 http://ftp.jaist.ac.jp/pub/Linux/ubuntu bionic/universe amd64 daemon amd64 0.6.4-1build1 [99.5 kB]
取得:2 https://debian.neo4j.com stable/4.0 amd64 cypher-shell all 4.0.3 [27.1 MB]
取得:3 https://debian.neo4j.com stable/4.0 amd64 neo4j all 1:4.0.3 [74.5 MB]
102 MB を 22秒 で取得しました (4,713 kB/s)
パッケージを事前設定しています ...
以前に未選択のパッケージ daemon を選択しています。
(データベースを読み込んでいます ... 現在 475148 個のファイルとディレクトリがインストールされています。)
.../daemon_0.6.4-1build1_amd64.deb を展開する準備をしています ...
daemon (0.6.4-1build1) を展開しています...
以前に未選択のパッケージ cypher-shell を選択しています。
.../cypher-shell_4.0.3_all.deb を展開する準備をしています ...
cypher-shell (4.0.3) を展開しています...
以前に未選択のパッケージ neo4j を選択しています。
.../neo4j_1%3a4.0.3_all.deb を展開する準備をしています ...
neo4j (1:4.0.3) を展開しています...
cypher-shell (4.0.3) を設定しています ...
daemon (0.6.4-1build1) を設定しています ...
neo4j (1:4.0.3) を設定しています ...
systemd (237-3ubuntu10.39) のトリガを処理しています ...
man-db (2.8.3-2ubuntu0.1) のトリガを処理しています ...
ureadahead (0.100.0-21) のトリガを処理しています ...
ureadahead will be reprofiled on next reboot

リブート

起動に迷ってしまった。

ここを参考に。
http://sheepdogjam.cocolog-nifty.com/blog/2017/09/neo4jubuntu-c86.html
一日一事未満:Neo4jをUbuntuにインストールする

ブラウザで起動するのだが、単にlocalhost:7474ではだめです。
最初に、ターミナルから、

sudo service neo4j restart

次にブラウザを開いてから、localhost:7474
すると、パスワードを聞いてきます。初期パスワードは変更を求められます。
自分の場合、ローカルでしか使わないので、適当に。


git-guiを使う

gitに今ひとつ慣れないので、サーフィンしていたらgit-guiなるものがあることを発見。
https://w.atwiki.jp/git_jp/pages/1.html

早速インストールしてみたけど使い方はまだ慣れないが、いまあるテキストをサーバ側にアップすることはなんとかできた。

sudo apt install git-gui gitk
git gui

でGUI環境が起動する。最初、git-guiとやっていたらエラーになったがハイフンはいらないらしい。
どうもJavaの画面らしいGUI。

流れは次の通り
1.gitlab側に新しいフォルダを作成
2.git-guiで作業対象のフォルダを開き、1をクローンする
3.git-guiで、下部中央のボタンを上から順番に押すイメージで、スキャンして変更ファイルをリストアップ、対象ファイルをstage(単にクリックすれば良い)して、commitボタン、pushボタンを順にクリック。

と簡単だった。


LinuxでPaSoRiを使いたい

Linuxは使ってみるとその便利さがわかるし軽さも気に入っているが、世間のツールがWindows前提になっているものがあり、ときどきそこにひかかることがある。
実は、住基カードの時代から確定申告をネットで済ませたかったのだが、住基カードからいよいよマイナンバーカードに切り替えてそれができるようになったタイミングでLinuxを導入したため、eTaxがInternet Explorer対応ということで相変わらず実現できていない。

ソフトウェアの問題はいずれ解決するはずなのだがハードとしてはマイナンバーカードを読み取るためのPaSoRiが使える環境が必要だ。スマホのNFCでええよという考え方もあるが、そこはPCでもできるようにしておかないと負けた気がする。

世の中には親切な人がいるのはLinuxをつかうと感じることなのだが、やはりこういうサイトがあった。
PythonでSuicaの残高を取得する(libpafe使用)

https://github.com/rfujita/libpafe
https://nfcpy.readthedocs.io/en/latest/index.html

一応、一通りのインストール手順は踏んだところだが、テストのところでErrorが返ってくる。(´・ω・`)

困っていたら自分でも2年前に下調べをしていた。
(下調べ)ubuntuでPaSoRiを使う
が、リンク先はすでに存在せず。(´・ω・`)

再度検索し直して、以下のサイトを参考に、libpafeではなくnfcのモジュールを使ってみることにした。
Ubuntu 11.04 で SonyのPaSoRi (RC-S330) を使う

http://nfc-tools.org/index.php?title=Main_Page
とあわせて手順通りインストールしたら、lsusbでハードは認識していそう。

~$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 5986:0706 Acer, Inc
Bus 001 Device 004: ID 054c:02e1 Sony Corp. FeliCa S330 [PaSoRi]
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

しかし、デバイスが見つからないというメッセージが返ってくる。

$ nfc-list
nfc-list uses libnfc 1.7.1
error libnfc.driver.pn53x_usb Unable to set USB configuration (Device or resource busy)
No NFC device found.

令和元年の取り組みはここまで
ーーーーー

令和二年の取り組み開始。といっても確定申告は終えてしまった。
卑屈にもWindowsを起動させて関係ソフトをインストールしてeTaxを使ってしまったぞい(´・ω・`)

上のメッセージに現れているが、USBはlsusbにより認識されていることがわかる。
しかし、pn53x_usbが邪魔をしているようだ。
これは自動でインストールされるのだが、Linuxのカーネルが1.3以降では入れてはいけないと書いてあった。

このサイトを見つけた。
Ubuntu 11.04 で SonyのPaSoRi (RC-S330) を使う http://blog.okay.to/kludge/archives/11
Yet Another Unable to claim USB interface #426 https://github.com/nfc-tools/libnfc/issues/426
nfc-list fails with PN533 usb device #221 https://github.com/nfc-tools/libnfc/issues/221

そこで以下の処理をしてみた。

~$ nfc-list
nfc-list uses libnfc 1.7.1
error libnfc.driver.pn53x_usb Unable to set USB configuration (Device or resource busy)
No NFC device found.

pn53x_usbのせいでNFCデバイスが見つからんと叱られる。

~$ lsmod | head -n 2
Module Size Used by
pn533_usb 20480 0

pn533_usbがしっかりと鎮座している。

~$ sudo rmmod pn533_usb

これでpn533に消えてもらう。

~$ nfc-list
nfc-list uses libnfc 1.7.1
NFC device: Sony / ? opened
1 ISO14443B passive target(s) found:
ISO/IEC 14443-4B (106 kbps) target:
PUPI: 53 8d 4f e5
Application Data: 00 00 41 e0
Protocol Info: b3 81 a1

なんか先に進んだ感じがする。


NEologdをインストールする

MeCabで開示関係の文書の形態素解析をすると、色々不便なことにぶつかることの一つが複合語対応。
開示文書は、法律の名前に始まり漢字を寄せ集めて一つの言葉を定義していることが多く、形態素解析でそれがバラバラに分解され(過ぎ)てしまう。
例えば、「連結貸借対照表」は一つの単語だが、形態素解析では、連結 貸借 対照 表という具合に4つに分解されてしまう。
そこで専門用語の辞書を追加してやる必要があるのだが、会計用語辞書なる気の利いたものはあるわけではないので、自前で用意するしかない。
自前の前に現代用語を集積してMeCab用に加工された、mecab-ipadic-NEologdを使うことにした。

https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md

インストール方法は、上記のgithubに掲載されているが、自分用のメモ。

1.自分のgitディレクトリで、neologdをクローンする

cd ~./git
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git

※サイトからコピペするときは、$を消去しましょう(笑)

2. NEOLOGDのディレクトリに移ってコンパイル

cd mecab-ipadic-neologd/
sudo ./bin/install-mecab-ipadic-neologd -n # このコマンドで二回目以降は更新されるらしい。

メモリが足りなくなるなどの注意が書いてあったが、自分の環境ではそういった事象はなく、10秒ほどで終わった。

3.辞書を指定して分析する

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

(例文)
当社の連結貸借対照表日は令和元年12月31日ですが、連結会計年度の開始日は平成31年10月1日で、個別財務諸表の会計年度の開始日である平成31年1月1日とは異なります。

MeCabのデフォルト(IPADIC)

当社 名詞,一般,,,,,当社,トウシャ,トーシャ
の 助詞,連体化,,,,,の,ノ,ノ
連結 名詞,サ変接続,,,,,連結,レンケツ,レンケツ
貸借 名詞,サ変接続,,,,,貸借,タイシャク,タイシャク
対照 名詞,サ変接続,,,,,対照,タイショウ,タイショー
表 名詞,接尾,一般,,,,表,ヒョウ,ヒョー
日 名詞,接尾,一般,
,,,日,ビ,ビ
は 助詞,係助詞,,,,,は,ハ,ワ
令 名詞,一般,,,,,令,リョウ,リョー
和 名詞,一般,,,,,和,ワ,ワ
元年 名詞,一般,,,,,元年,ガンネン,ガンネン
12月 名詞,副詞可能,,,,,12月,ジュウニガツ,ジューニガツ
31 名詞,数,,,,,*
日 名詞,接尾,助数詞,,,,日,ニチ,ニチ
です 助動詞,
,,,特殊・デス,基本形,です,デス,デス
が 助詞,接続助詞,,,,,が,ガ,ガ
、 記号,読点,,,,,、,、,、
連結 名詞,サ変接続,,,,,連結,レンケツ,レンケツ
会計 名詞,サ変接続,,,,,会計,カイケイ,カイケイ
年度 名詞,一般,,,,,年度,ネンド,ネンド
の 助詞,連体化,,,,,の,ノ,ノ
開始 名詞,サ変接続,,,,,開始,カイシ,カイシ
日 名詞,接尾,一般,,,,日,ビ,ビ
は 助詞,係助詞,
,,,,は,ハ,ワ
2 名詞,数,
,,,,2,ニ,ニ
0 名詞,数,
,,,,0,ゼロ,ゼロ
1 名詞,数,
,,,,1,イチ,イチ
9 名詞,数,
,,,,9,キュウ,キュー
年 名詞,接尾,助数詞,
,,,年,ネン,ネン
10月 名詞,副詞可能,,,,,10月,ジュウガツ,ジューガツ
1 名詞,数,,,,,1,イチ,イチ
日 名詞,接尾,助数詞,,,,日,ニチ,ニチ
で 助動詞,
,,,特殊・ダ,連用形,だ,デ,デ
、 記号,読点,,,,,、,、,、
個別 名詞,形容動詞語幹,,,,,個別,コベツ,コベツ
財務諸表 名詞,一般,,,,,財務諸表,ザイムショヒョウ,ザイムショヒョー
の 助詞,連体化,,,,,の,ノ,ノ
会計 名詞,サ変接続,,,,,会計,カイケイ,カイケイ
年度 名詞,一般,,,,,年度,ネンド,ネンド
の 助詞,連体化,,,,,の,ノ,ノ
開始 名詞,サ変接続,,,,,開始,カイシ,カイシ
日 名詞,接尾,一般,,,,日,ビ,ビ
で 助動詞,
,,,特殊・ダ,連用形,だ,デ,デ
ある 助動詞,,,,五段・ラ行アル,基本形,ある,アル,アル
平成 名詞,固有名詞,一般,
,,,平成,ヘイセイ,ヘイセイ
31 名詞,数,,,,,*
年 名詞,接尾,助数詞,,,,年,ネン,ネン
1月 名詞,副詞可能,
,,,,1月,イチガツ,イチガツ
1 名詞,数,
,,,,1,イチ,イチ
日 名詞,接尾,助数詞,
,,,日,ニチ,ニチ
と 助詞,格助詞,引用,,,,と,ト,ト
は 助詞,係助詞,
,,,,は,ハ,ワ
異なり 動詞,自立,
,,五段・ラ行,連用形,異なる,コトナリ,コトナリ
ます 助動詞,
,,,特殊・マス,基本形,ます,マス,マス
。 記号,句点,,,,,。,。,。
EOS

NeoLogDを使用した解析

当社 名詞,一般,,,,,当社,トウシャ,トーシャ
の 助詞,連体化,,,,,の,ノ,ノ
連結貸借対照表 名詞,固有名詞,一般,,,,連結貸借対照表,レンケツタイシャクタイショウヒョ,レンケツタイシャクタイショーヒョ
日 名詞,接尾,一般,
,,,日,ビ,ビ
は 助詞,係助詞,,,,,は,ハ,ワ
令和元年 名詞,固有名詞,一般,,,,2019年,レイワガンネン,レイワガンネン
12月 名詞,副詞可能,
,,,,12月,ジュウニガツ,ジューニガツ
31日 名詞,固有名詞,一般,
,,,31日,サンジュウイチニチ,サンジュウイチニチ
です 助動詞,,,,特殊・デス,基本形,です,デス,デス
が 助詞,接続助詞,
,,,,が,ガ,ガ
、 記号,読点,
,,,,、,、,、
連結会計 名詞,固有名詞,一般,
,,,連結会計,レンケツカイケイ,レンケツカイケイ
年度 名詞,一般,,,,,年度,ネンド,ネンド
の 助詞,連体化,,,,,の,ノ,ノ
開始 名詞,サ変接続,,,,,開始,カイシ,カイシ
日 名詞,接尾,一般,,,,日,ビ,ビ
は 助詞,係助詞,
,,,,は,ハ,ワ
2 名詞,数,
,,,,2,ニ,ニ
0 名詞,数,
,,,,0,ゼロ,ゼロ
1 名詞,数,
,,,,1,イチ,イチ
9 名詞,数,
,,,,9,キュウ,キュー
年 名詞,接尾,助数詞,
,,,年,ネン,ネン
10月 名詞,副詞可能,,,,,10月,ジュウガツ,ジューガツ
1 名詞,数,,,,,1,イチ,イチ
日 名詞,接尾,助数詞,,,,日,ニチ,ニチ
で 助動詞,
,,,特殊・ダ,連用形,だ,デ,デ
、 記号,読点,,,,,、,、,、
個別財務諸表 名詞,固有名詞,一般,,,,個別財務諸表,コベツザイムショヒョウ,コベツザイムショヒョー
の 助詞,連体化,
,,,,の,ノ,ノ
会計年度 名詞,固有名詞,一般,
,,,会計年度,カイケイネンド,カイケイネンド
の 助詞,連体化,,,,,の,ノ,ノ
開始 名詞,サ変接続,,,,,開始,カイシ,カイシ
日 名詞,接尾,一般,,,,日,ビ,ビ
で 助動詞,
,,,特殊・ダ,連用形,だ,デ,デ
ある 助動詞,,,,五段・ラ行アル,基本形,ある,アル,アル
平成31年 名詞,固有名詞,一般,
,,,平成31年,ヘイセイサンジュウイチネン,ヘイセイサンジュウイチネン
1月 名詞,副詞可能,,,,,1月,イチガツ,イチガツ
1 名詞,数,,,,,1,イチ,イチ
日 名詞,接尾,助数詞,,,,日,ニチ,ニチ
と 助詞,格助詞,引用,
,,,と,ト,ト
は 助詞,係助詞,,,,,は,ハ,ワ
異なり 動詞,自立,,,五段・ラ行,連用形,異なる,コトナリ,コトナリ
ます 助動詞,,,,特殊・マス,基本形,ます,マス,マス
。 記号,句点,
,,,*,。,。,。
EOS

割といいかも。
連結貸借対照表が一つの単語になっている。

おしい
連結会計、会計年度はあるが連結会計年度は複合語として認識されない。

課題
全角の数字は分割されてしまうので、分析前に半角変換が必要かも。
財務情報の分析に使うなら、数字の文章内での分析の仕方は自分で工夫しなければいけない。


gitを使う

初めてgitを使ってみた。
これまでは、サーバのパケージをローカルに落とすためにクローンを作るためか、gitサーバに搭載されているRのパッケージを直接インストールする際に、サイトの指示通りに使っていただけだったので、本来のgitの使い方をしていない。

gitはプログラム開発のコラボレーションツールで、簡単に言えば、プログラムのソースを開発者複数名でサーバで共有しながら、開発作業を分担並行して行っても、ソースコードの管理が簡単に行えるようにしてある。(正確には違う)

私の場合、複数のPCで作業をすることがあるので、それぞれの場所で思い立ったときに思い立った作業をするにあたって、一つ一つ同期をとるのが大変だったので、gitlabで管理することにした。

プログラムソースはほとんどないが、原稿なども同じようにテキストファイルなので、gitlabで管理できる。これは学者の友人が論文を書く際に使っているという話をヒントにしたものだ。

まだ使い方がよくわかっていないので、これから少しずつ研究していく。