鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

SpringBootにSudachiの導入できた

src/main/resources/sudachiフォルダを掘るそこに以下のファイルを格納する

  • char.def
  • sudachi.json
  • 辞書ファイル(system_core.dic)

sudachi.jsonのパスを編集

    "systemDict" : "system_core.dic",
    "characterDefinitionFile": "char.def",

    "systemDict" : "sudachi/system_core.dic",
    "characterDefinitionFile": "sudachi/char.def",

Javaソース

	        Resource resource = new ClassPathResource("sudachi/sudachi.json");
	        String sudachiSettingJson = StreamUtils.copyToString(resource.getInputStream(), StandardCharsets.UTF_8);

sudachiDictionaryDirectory);
			dictionary = new DictionaryFactory().create(sudachiSettingJson);

実行すると
java.io.IOException: invalid dictionaryが発生して詰まってしまった。

jarファイルから、辞書は読んでくれないようなので
こんな感じでソースから読ませるようにしましたら、うまくいった。
jarだけでは実行できないので、ソースも実行環境に上げておきましょうということかな。

sudachi.jsonのパスを編集を修正

    "systemDict" : "src/main/resources/sudachi/system_core.dic",
    "characterDefinitionFile": "src/main/resources/sudachi/char.def",

perlワンライナーでよしなにHTMLを分割する

大きなHTMLファイルを小さく分割したかった。
でも切る時にHTMLとしての構成は維持したかった。
CPANにHTML::Splitという神モジュールが登録されていた。

そのままだと、ファイル出力用ではないのでワンライナーでなんとかしました。
ファイル名がハードコーディングなのがカッコ悪いですが・・

cat result.html | perl -MHTML::Split -e 'my $html ="";while(<>){$html .= $_;} my @pages = HTML::Split->split(html => $html, length => 30000); while (my ($i, $page) = each (@pages)){open (my $fh, ">", "result." . $i . ".html"); print $fh $page;close ($fh);}'

pdfgrepの内容をperlワンライナーでtable化する

pdfgrepで検索すると、文字列がヒットした行は、「ファイル名:本文」
その周辺行は「ファイル名-本文」と表示されるようだった。

  • Cオプションで周辺行の行数を指定できる。

正規表現でファイル名部分と、本文部分をグループで分けて、ファイル名部分(グループ1)が変わったタイミングでファイル名の列部分をグループ1から出力するようにした。
本文の列はグループ2から出力するようにしました。

pdfgrep --cache -m 1  -C 3 増配 *.pdf 2> /dev/null | perl -nle 'BEGIN{$f="";print "<table border=1>";} {if ($_ =~ /(.*?)\.pdf[:-](.*)/) { if ($f != $1){ if ($f != ""){print "</td></tr>"} print "<tr><td>" . $1 . "</td><td>"; $f=$1;} print $2;  } }' > result.html