この記事でわかること
- Power Automate for desktop(PAD)でテキストを改行をもとに分割する方法がわかる。
- PADのリスト変数で、無駄な空白要素をまとめて削除する方法がわかる。
テキストを改行単位で分割したい。
PADでスクレイピングなどで取ってきたテキストが、すごく長文なため、ちょうどよいチャンクに分割したいことがあります。
今回は「テキストを改行ごとに分割する。」方法について考えてみます。
テキストを分割するには?
テキストの分割アクションを使います。
Power Automate for desktopでテキストを分割するには「テキストの分割」アクションを使います。
PADでテキストを分割する時は「テキストの分割」アクションを使います。
このアクションについては過去に一度紹介しているので下記の記事もよろしければご参考になさってください。
テキストを改行を基準に分割する方法(シンプルバージョン)
メロスは激怒した。 必ず、かの邪智暴虐じゃちぼうぎゃくの王を除かなければならぬと決意した。 メロスには政治がわからぬ。 メロスは、村の牧人である。笛を吹き、羊と遊んで暮して来た。
目的のテキストが上のテキストのように1文ごとに改行が挿入されていれば簡単です。
改行を基準に分割すればよさそうですね。
フロー作成手順
▲今回ターゲットのテキストは変数に入れておきます。「変数」グループの中の「変数の設定」アクションを追加します。
パラメータ
値:下記を入力しました。
メロスは激怒した。
必ず、かの邪智暴虐じゃちぼうぎゃくの王を除かなければならぬと決意した。
メロスには政治がわからぬ。
メロスは、村の牧人である。笛を吹き、羊と遊んで暮して来た。
(「走れメロス – 太宰治」より抜粋)
▲「テキスト」グループの中の「テキストの分割」アクションを追加します。パラメータは下記のように入力しました。
パラメータ
- 分割するテキスト:%NewVar%
- 区切り記号の種類:標準
- 標準の区切り記号:新しい行
- 回数:1
回数は、区切り記号が何回連続で登場した時に区切るかの指定です。たとえば「2」と入力すると2連続で改行コードが挿入されている箇所のみが区切られます。今回のターゲットのテキストは1文ごとに1回テキストが
フローが完成したので実行してみましょう。
▲フローを実行したら、フローデザイナーの右側の変数ペインの中の「TextList」変数をダブルクリックして開きます。
▲「TextList」変数の中身です。TextList変数はリスト型変数になっています。文章のかたまりを文単位に分割することができました。
テキストを改行を基準に分割する方法(改行が不規則な場合)
先生、分割したTextList変数に無駄な空白の要素が入ってしまいました・・・。(上図)
テキストの途中に不規則な数の空白行がある場合、先ほど紹介したフローでは、分割結果のリスト変数に無駄な空白要素が入ってしまいますね。
メロスは激怒した。 必ず、かの邪智暴虐じゃちぼうぎゃくの王を除かなければならぬと決意した。 メロスには政治がわからぬ。 メロスは、村の牧人である。笛を吹き、羊と遊んで暮して来た。
こういう場合は「リストから項目を削除」で無駄な要素を削除すればいいかなと思います。↑の文章を例に対策を紹介します。
「リストの項目を削除する」アクションとは?
「リストの項目を削除する」アクションとは?
リストの要素の中から、指定した文字にマッチする要素を検索して削除します。
フローの作成手順
今回は先程作成フローをそのまま編集する形で説明を進めます。
▲先ほど作成したフローを開き、変数の設定アクションの値を下記の文章に書き換えます。先ほどとは違い不規則な改行が入った文章です。
メロスは激怒した。 必ず、かの邪智暴虐じゃちぼうぎゃくの王を除かなければならぬと決意した。 メロスには政治がわからぬ。 メロスは、村の牧人である。笛を吹き、羊と遊んで暮して来た。
▲この状態でフローを実行してTextLIst変数の中を確認すると、元テキストの空白行があった部分が余計な空白要素になっています。次のステップでこれを削除していきます。
▲テキストの分割アクションのうしろに3つ目のアクションとして「リストから項目を削除」アクションを追加します。(2番目のアクションは先ほどの状態のまま手は加えません。)
▲「リストから項目を削除」アクションのパラメータを入力します。
パラメータ
- 項目の削除基準:値
- 値:%”%
- 一致した項目をすべて削除:オン
- 削除元リスト:%TextLIst%
入力したパラメータの意味は、「リストの中に%”%と一致する要素があったら削除してね。」って意味です。
「%”%」は空の文字列、つまり空白でしたね。以前の記事(下記)で学習しました。
このアクションは「値」のパラメータを空っぽのままにできないのでこうやって強引に空白を指定しています。
エラー対策
今回は「リストから項目を削除」アクションだけエラー処理を施しておきます。なぜかというと、デフォルトでは、もしリスト内に空白要素がない場所、「リストから削除する対象がないよー」というエラーが発生してフローが止まってしまうからです。削除する要素がなくても気にせずに次に進んでもらう設定をします。
▲設定画面左下の「エラー発生時」をクリックします。
▲「詳細」をクリックして隠れている部分を表示させてから「項目が見つかりません」のところの「フロー実行を続行する」をクリックします。例外処理モードは「次のアクションに移動」にします。設定したら完了ボタンで設定画面を閉じます。
▲フローが完成しました。「リストから項目を削除」アクションの左側にシールドマークがついています。これはエラー処理設定がされたアクションであることを表します。
▲フローを実行後、TextList変数を確認すると余分な空白要素が消えています。成功です。
余計な空白行がテキストにもう一度差戻してエラー処理が効いているかも確認してみてくださいね。
Robinソースコード
SET NewVar TO $'''メロスは激怒した。 必ず、かの邪智暴虐じゃちぼうぎゃくの王を除かなければならぬと決意した。 メロスには政治がわからぬ。 メロスは、村の牧人である。笛を吹き、羊と遊んで暮して来た。''' Text.SplitText.Split Text: NewVar StandardDelimiter: Text.StandardDelimiter.NewLine DelimiterTimes: 1 Result=> TextList Variables.RemoveItemFromList.RemoveItemFromListByValue Item: $'''%''%''' ItemMatchAllOccurrences: True List: TextList NewList=> TextList ON ERROR ItemNotFoundError END # [ControlRepository][PowerAutomateDesktop] { "ControlRepositorySymbols": [], "ImageRepositorySymbol": { "Name": "imgrepo", "ImportMetadata": {}, "Repository": "{\r\n \"Folders\": [],\r\n \"Images\": [],\r\n \"Version\": 1\r\n}" } }
▲今回作成したPADフローのソースコードです。ご自分のフローデザイナーにコピペするとフローを再現できるかと思います。
テキストを1文ずつ分割するには?
改行ではなく句点(「。」)を使って1文ずつ取り出したいケースもあるかと思います。そちらの場合は下記の記事で紹介していますので参考になさってください。
まとめ
PADで「テキストの分割」アクションを使って、改行ごとにテキスト分割の方法について紹介しました。
このブログではRPA・ノーコードツール・VBA/GAS/Pythonを使った業務効率化などについて発信しています。
参考になりましたらブックマーク登録お願いします!
PADの使い方まとめ記事はこちら
Power Automate学習教材
▲Kindleと紙媒体両方提供されています。デスクトップフロー、クラウドフロー両方の解説がある書籍です。解説の割合としてはデスクトップフロー7割・クラウドフロー3割程度の比率となっています。両者の概要をざっくり理解するのにオススメです。
▲Power Automate for Desktopの基本をしっかり学習するのにオススメです。この本の一番のメリットはデモWebシステム・デモ業務アプリを実際に使ってハンズオン形式で学習できる点です。本と同じシステム・アプリを使って学習できるので、本と自分の環境の違いによる「よく分からないエラー」で無駄に躓いて挫折してしまう可能性が低いです。この点でPower Automate for desktopの一冊目のテキストとしてオススメします。著者は日本屈指のRPAエンジニア集団である『ロボ研』さんです。
▲Power Automate クラウドフローの入門書です。初心者の方には図解も多く一番わかりやすいかと個人的に思っています。
Microsoft 365/ Power Automate / Power Platform / Google Apps Script…
▲Udemyで数少ないPower Automateクラウドフローを主題にした講座です。セール時は90%OFF(1200円~2000円弱)の価格になります。頻繁にセールを実施しているので絶対にセール時に購入してくださいね。満足がいかなければ返金保証制度がありますので安心してご購入いただけます。