Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

doc,docx,pdfで文字を取り出せない #1

Open
hiroppp opened this issue Nov 20, 2019 · 7 comments
Open

doc,docx,pdfで文字を取り出せない #1

hiroppp opened this issue Nov 20, 2019 · 7 comments

Comments

@hiroppp
Copy link

hiroppp commented Nov 20, 2019

redmine_full_text_searchで使用させて頂いているのですが、一部のファイルから文字が取り出せていません。
.doc , .docxはハングして応答なし、pdf(iTextSharpで作成)は抽出文字数が0になってしまいます。
Webアクセス方式で試しても同様でした。

環境
Windows 10 pro
Docker desktop 2.1.0.5
Chrome , Postman

ログと検証ファイルを添付します。
テスト.zip(.doc)

chupa-text_1  | I, [2019-11-20T00:41:17.398233 #884]  INFO -- : [adfdc7bf-d67a-44b3-a231-54a0d7c90c46] Started POST "/extraction" for 172.18.0.1 at 2019-11-20 00:41:17 +0000
chupa-text_1  | I, [2019-11-20T00:41:17.398717 #884]  INFO -- : [adfdc7bf-d67a-44b3-a231-54a0d7c90c46] Processing by ExtractionsController#create as HTML
chupa-text_1  | I, [2019-11-20T00:41:17.398791 #884]  INFO -- : [adfdc7bf-d67a-44b3-a231-54a0d7c90c46]   Parameters: {"utf8"=>"?", "authenticity_token"=>"YwYVY5tO8ctUX8VDNRUUI0lX0bsARlic2G1VXP3b5p/XYHXGM7G86NfmSSLlqFqR2dDluXRniCmAd4/Lupyf2w==", "extraction"=>{"data"=>#<ActionDispatch::Http::UploadedFile:0x0000561c562a78f8 @tempfile=#<Tempfile:/tmp/RackMultipart20191120-884-1xdugq7.doc>, @original_filename="テスト.doc", @content_type="application/octet-stream", @headers="Content-Disposition: form-data; name=\"extraction[data]\"; filename=\"\xE3\x83\x86\xE3\x82\xB9\xE3\x83\x88.doc\"\r\nContent-Type: application/octet-stream\r\n">, "uri"=>""}, "commit"=>"Extract"}
chupa-text_1  | D, [2019-11-20T00:41:17.399542 #884] DEBUG -- : [adfdc7bf-d67a-44b3-a231-54a0d7c90c46] [extractor][extract][target] <file:///home/chupa-text/chupa-text-http-server/%E3%83%86%E3%82%B9%E3%83%88.doc>:<application/octet-stream>
chupa-text_1  | D, [2019-11-20T00:41:17.399666 #884] DEBUG -- : [adfdc7bf-d67a-44b3-a231-54a0d7c90c46] [extractor][extract][decomposer] ChupaText::Decomposers::AbiWord

テスト.docx

chupa-text_1  | I, [2019-11-20T00:42:34.819710 #1029]  INFO -- : [56d5d011-962f-4a61-9dfa-1cc5133c9711] Started POST "/extraction" for 172.18.0.1 at 2019-11-20 00:42:34 +0000
chupa-text_1  | I, [2019-11-20T00:42:34.820171 #1029]  INFO -- : [56d5d011-962f-4a61-9dfa-1cc5133c9711] Processing by ExtractionsController#create as HTML
chupa-text_1  | I, [2019-11-20T00:42:34.820254 #1029]  INFO -- : [56d5d011-962f-4a61-9dfa-1cc5133c9711]   Parameters: {"utf8"=>"?", "authenticity_token"=>"rXDDP1fSuMEpE/7S2jLGPoAKGmOFb/cGl4Lh3SCgSmoZFqOa/y314qqqcrMKj4iMEI0uYfFOJ7PPmDtKZ+czLg==", "extraction"=>{"data"=>#<ActionDispatch::Http::UploadedFile:0x0000561c55757de0 @tempfile=#<Tempfile:/tmp/RackMultipart20191120-1029-1sealwx.docx>, @original_filename="テスト.docx", @content_type="application/octet-stream", @headers="Content-Disposition: form-data; name=\"extraction[data]\"; filename=\"\xE3\x83\x86\xE3\x82\xB9\xE3\x83\x88.docx\"\r\nContent-Type: application/octet-stream\r\n">, "uri"=>""}, "commit"=>"Extract"}
chupa-text_1  | D, [2019-11-20T00:42:34.821392 #1029] DEBUG -- : [56d5d011-962f-4a61-9dfa-1cc5133c9711] [decomposer][libreoffice][word][command][found] libreoffice
chupa-text_1  | D, [2019-11-20T00:42:34.821526 #1029] DEBUG -- : [56d5d011-962f-4a61-9dfa-1cc5133c9711] [decomposer][libreoffice][powerpoint][command][found] libreoffice
chupa-text_1  | D, [2019-11-20T00:42:34.821656 #1029] DEBUG -- : [56d5d011-962f-4a61-9dfa-1cc5133c9711] [decomposer][libreoffice][excel][command][found] libreoffice
chupa-text_1  | D, [2019-11-20T00:42:34.821804 #1029] DEBUG -- : [56d5d011-962f-4a61-9dfa-1cc5133c9711] [decomposer][abiword][command][found] abiword
chupa-text_1  | D, [2019-11-20T00:42:34.823010 #1029] DEBUG -- : [56d5d011-962f-4a61-9dfa-1cc5133c9711] [extractor][extract][target] <file:///home/chupa-text/chupa-text-http-server/%E3%83%86%E3%82%B9%E3%83%88.docx>:<application/octet-stream>
chupa-text_1  | D, [2019-11-20T00:42:34.823188 #1029] DEBUG -- : [56d5d011-962f-4a61-9dfa-1cc5133c9711] [extractor][extract][decomposer] ChupaText::Decomposers::AbiWord

テスト1.pdf
iTextSharp作成pdf

@komainu8
Copy link
Member

pdfの方は、再現したので、調査を進めています。
doc, docxの方はLinux(Debian)上では再現しなかったので、Windows上で試そうと思っています。

なるべく再現した環境と同じ状態にしたいので、Windowsでどうやってchupa-text-dockerをセットアップしたかを教えていただけないでしょうか?

@hiroppp
Copy link
Author

hiroppp commented Nov 21, 2019

手順は下記になります。
ログ等のフォルダは設定はしていません。

cd d:\docker
git clone https://github.com/ranguba/chupa-text-docker.git
cd chupa-text-docker
docker-compose up

http://localhost:20080/extraction へブラウザでアクセスしてファイルを選択してExtract実行で再現します。

@komainu8
Copy link
Member

手順のご連絡ありがとうございます。

すみません。。。手元ですぐに動かせるWindows機がないので、解析に少し時間がかかります。(VirtualBox上ではDockerが動かないようなので。。。)

@hiroppp
Copy link
Author

hiroppp commented Nov 26, 2019

対応ありがとうございます。

chupa-text-http-serverでも検証してみました。
Docker版とは違う結果になってしまいました。

テスト.doc
Metadataのみ表示
テスト.docx
抽出可
テスト.xls
Metadataのみ表示
テスト.xlsx
抽出可
テスト1.pdf
Metadataのみ表示
iTextSharpで出力された物
テスト2.pdf
Metadataのみ表示
Microsoft Print to PDFで出力した物
Docker版では文字列が抽出できていた。

再現手順(Hyper-V上のWin10 Enterpriseで確認)
Bitnami Redmine(bitnami-redmine-4.0.5-0-windows-x64-installer.exe)をC:\Bitnamiにインストール
Node.js(node-v13.2.0-x64.msi)をデフォルト設定でインストール
C:\Bitnami\redmine\use_redmine.batを起動して

cd C:\Bitnami
git clone https://github.com/ranguba/chupa-text-http-server.git
cd C:\Bitnami\chupa-text-http-server
bundle install
rails s

http://localhost:3000/extraction へブラウザでアクセスしてファイルを選択してExtract実行。

@kou
Copy link
Member

kou commented Nov 27, 2019

CIサービスのAppVeyorでDockerを使えたので試してみました。

ボリュームのパスに/var/log/chupa-text/...とかUNIX前提のパスの書き方になっているのでそもそもdocker-compose upで起動できませんでした。
https://github.com/ranguba/chupa-text-docker/blob/master/docker-compose.yml#L29

(今回の件とは関係ないけどこれはこれでどうにかしないといけない。)

chupa-text-http-serverでdocx/xlsxが抽出できるのは https://github.com/ranguba/chupa-text-decomposer-abiword とか https://github.com/ranguba/chupa-text-decomposer-libreoffice/ が組み込まれていなくてデフォルトの https://github.com/ranguba/chupa-text/blob/master/lib/chupa-text/decomposers/office-open-xml-document.rb が使われているからです。

これはdocx/xlsx(新しいオフィスフォーマット)を展開(実体はただのzipなので)して、中にあるXMLからテキストを抽出しているだけでpure Rubyで完結しているので動きます。Redmineの全文検索プラグインでChupaTextサーバーの設定をしなくても動くはずです。

ただ、doc/xls(古いオフィスフォーマット) https://blogs.technet.microsoft.com/seanearp/2008/02/16/microsoft-office-binary-file-format-specifications-released/ は独自のバイナリー形式でデフォルトでは対応していません。そのため、AbiWordとかLibreOfficeの機能を使わないとテキスト抽出できません。素のchupa-text-http-serverはそれらを使うプラグインを組み込んでいないんど絵テキスト抽出できていません。

chupa-text-http-serverでPDFからテキスト抽出できていないのは https://github.com/ranguba/chupa-text-decomposer-pdf が組み込まれていないからです。

@hiroppp
Copy link
Author

hiroppp commented Dec 10, 2019

なるほど、そういうことなんですね。
Windows環境でchupa-text-http-server+decomposer組み込みに挑戦してみましたが手間はかかるしうまく行きませんでした。
Docker推奨なのが理解できました…

decomposerを組み込んで各形式に対応しているのは分かったのですが
chupa-text-dockerにはどれが入っているのでしょうか?
http://rubygems.org/search?query=chupa-text-decomposer- のみ?
https://github.com/ranguba/chupa-text-decomposer-mail があったので.emlファイルを試してみたらMetadataのみの表示でしたので。

@kou
Copy link
Member

kou commented Dec 10, 2019

https://github.com/ranguba/chupa-text-docker/blob/master/chupa-text/ubuntu/home/chupa-text/chupa-text-http-server/Gemfile.local が入っています。

あぁ、 https://github.com/ranguba/chupa-text-decomposer-mail はリリースしていなかったんですね。後でリリースしておきます。

こちらでも確認したいのでテキスト抽出できなかった.emlファイルを提供してもらえますか?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants