![見出し画像](https://assets.st-note.com/production/uploads/images/88535052/rectangle_large_type_2_96d2dad069d5ae76d7afc88059aa147b.png?width=1200)
【JKI】037_Text_Deduplication
【JKI_037】課題を確認
Just KNIME It! (JKI)
今回の挑戦はこちら
![](https://assets.st-note.com/img/1665199649099-6g5DB4Y9vD.png?width=1200)
問題文のところだけをGoogle翻訳し少し加筆して以下に
課題37: テキスト重複除去
レベル: 簡単
説明:
Tika Parser を使用して、PDFからスウェーデン語のテキストデータを読み取るように求められます。
次に、テキストの多くが重複していることに気付きます。
これは、PDF自体のエンコーディングの問題である可能性があります。
その結果、テキストを重複排除することにしました。
この課題では、できるだけ少ないノードを使用して、過剰な量の重複テキストを削除するために最善を尽くしてください。
このようなほとんどの場合、テキストを完全に削除することを目指しているのではなく、重複の大部分を排除する費用対効果の高いアプローチを目指しています。
ヒント: このソリューションは5つのノードで構成されていますが、ワークフローによっては5番目のノードが不要な場合があります。
【PDFデータをKNIMEで取り込む】
【サンプルデータを読んでみると】
今回はスウェーデン語データを扱うのですね。サンプルデータを取ってきましょう。
サンプルデータ:
![](https://assets.st-note.com/img/1665199885790-L8XjGMt7Zd.png?width=1200)
内容はさっぱり見当もつかないです。でも最近は自動翻訳が素晴らしいですね。
![](https://assets.st-note.com/img/1665199930936-P3kuRuE4RZ.png?width=1200)
なるほど、何となくリンネ大学の「健康と行動科学」分野の教育プログラム説明なんだなと当たりが付きました。
さていつも通りWorkflow(WF)のdataフォルダに入れておいて読み込んでみましょう。
【Tika Parser再び】
第15回のJKIでTika Parserの利用例は紹介済です。
PDFデータをKNIMEで読み込むと言えばTika Parserの出番ですので、上記の記事を参考に今回も実行してみます。
![](https://assets.st-note.com/img/1665200071555-gCeGTW7MaC.png)
設定:
![](https://assets.st-note.com/img/1665200100867-eEMYgE45GR.png?width=1200)
結果:
![](https://assets.st-note.com/img/1665200144860-0iyAnxU6yt.png?width=1200)
さて、これだけ見てもデータ重複にはなかなか気づきません。
実際には4回繰り返され、繰り返される前には
![](https://assets.st-note.com/img/1665200188621-vn18W27vaP.png?width=1200)
空白行3行ののちに
「Dnr: FAK/2011/84」以降の同じ内容が繰り返し入っています。
この法則性を利用して繰り返し部分と分けていきます。
【必要なデータの切出し】
Tika Parserは1つのセルに文章を丸ごと取り込んできますので、セルのデータを分割していく最初の一歩はCell Splitterノードがよく使われることでしょう。
【Cell Splitter】
![](https://assets.st-note.com/img/1665200306117-4GahGgUFqU.png)
設定:
![](https://assets.st-note.com/img/1665200335272-nSXo9uiBIq.png?width=1200)
先述の通り、重複する部分の間には空白行が3行続くという特徴がありました。つまり、文章の最後には4回改行が入りますね。
改行4連続を正規表現で表して、デリミタつまり切り分ける境目としました。
![](https://assets.st-note.com/img/1665200378680-EYdjS4Idnq.png)
結果:
![](https://assets.st-note.com/img/1665200416124-goC3tYGyWo.png?width=1200)
4つのセルに分けられていて、文頭に1行だけ空白行がある分ずれてはいるものの、同じ内容が書かれているとわかっていただけると思います。
【Column Filter】
![](https://assets.st-note.com/img/1665200494690-g004rqJX8H.png)
今回重複分はいらないので1列目だけ残して出来上がりです。3ノードで効率はよかったと思います。
設定:
![](https://assets.st-note.com/img/1665200542814-oWjSSpUVEs.png?width=1200)
結果:
![](https://assets.st-note.com/img/1665200710761-gBX3SPLJSA.png?width=1200)
KNIME Hubに解答は上げています。
おまけ:
【JKI_036 感想戦】
先週のJust KNIME It! 第36回はタイムアライメントを練習しました。
1979年12月31日から1998年12月31日の土日を除くすべての日付の行を作る、すなわち祝日による欠損を埋めよという問題でした。
![](https://assets.st-note.com/img/1665200835021-2GIsDq9Gqb.png?width=1200)
Timestamp Alignmentコンポーネントは与えられたデータで一番古い日付と一番新しい日付の間をすべて埋めたデータを発生できる機能を持っています。後で土日を除いて、結果として4959日間のデータになります。
![](https://assets.st-note.com/img/1665200865115-b7U1QuAWKa.png?width=1200)
公式解答はこちらです。
![](https://assets.st-note.com/img/1665200923822-ae1j12zxZ6.png?width=1200)
へぇー毎週のループにして、無駄に土日の荷付けを発生しなくしたんだと思いつつ、結果を見て日数が少なくて驚きました。4834行なので125日欠損が生じています。
![](https://assets.st-note.com/img/1665200954236-8STWwCpvII.png?width=1200)
アクティベートした週は1980年2月18日(月)が欠損してしまっています。
実は先に紹介したコンポーネントの性質上、自明の欠損でして、月曜日か金曜日が祝日の場合はこの処理方法だと欠損を埋められないとわかります。
コンポーネントは確かに便利なのですが、その仕組みを理解しておけるといいですね。不具合発生時にどうしてこそういう結果になったかを見つけやすいです。
以下は全くの余談です。
5年前ぐらいと思いますが、AIが流行り出したころ、KNIMEやDataRobotで素人でも機械学習が手軽に使えるようになると喜んでいたら、ある玄人さんに苦言を呈されたことがあったなぁと思いだしています。ひとまず便利に体験をして面白いと思うのはいい。だが本当に実際に活用する前には深く技術理解を進めるべきだと。
全くもって正論です。今でもしばしば思い出すってことは、必ずしもできていないんですよね、実際。もう一回気を付けたいなと思いました。もう一回もう一回。
記事を読んでいただきありがとうございます。 先人の智慧をお借りしつつ、みなさんに役立つ情報が届けられたらと願っています。 もしサポートいただけるなら、そのお金はKNIMEの無料勉強会の開催資金に充てようと思います。