見出し画像

【ツール】AIに突っ込む前にメールやドキュメントから不要な情報を削除するためのテキスト処理ツール

ChatGPTなど生成AIにそのままドキュメントを突っ込むのも簡単ですが
メール相手などの個人情報などはできれば伏せて入れたいもの。

しかし不要な内容を削除するのは利用したい場合、手作業での編集は時間がかかるので、特定の情報を自動で見つけ出し削除するシンプルながら強力なテキスト処理ツールを作ってみました(ChatGPTを使って)。
このツールは、メールアドレス、電話番号、URLなど、特定のパターンに一致するテキスト行を簡単に削除できるようにしています。
PowerShellで動く環境であれば動くと思います。

主な機能

  • プリセット情報の削除: メールアドレス、電話番号、FAX番号、URL、郵便番号から始まる行など、プリセットされた情報を簡単に削除できます。

  • カスタムテキストの削除: ユーザーが指定した任意の文字列や文言を削除する機能も備えています。これにより、特定の挨拶文や名前など、標準的なフォーマット以外の情報も安全に取り除くことが可能です。

  • 複数行の改行の整理: 不要な空行を取り除き、文書の可読性を向上させます。

使用方法

  1. GUIの起動: ツールを起動すると、直感的なグラフィカルユーザーインターフェースが表示されます。ユーザーは、処理したいテキストを左側の入力エリアに貼り付けます。

  2. オプションの選択: 右側にあるチェックボックスから、削除したい情報のタイプを選択します。また、任意の文字列を削除したい場合は、その文字列を特別なテキストボックスに入力します。

  3. テキストの処理: 「処理」ボタンをクリックすると、選択したオプションに基づいてテキストが処理され、右側の出力エリアに結果が表示されます。

ソース

以下のスクリプトをPowerShellで実行もしくはメモ帳に張り付けて.ps1の拡張子で保存し実行します

Add-Type -AssemblyName PresentationFramework

# GUIの作成
$window = New-Object Windows.Window
$window.Title = "テキスト処理ツール"
$window.Width = 800
$window.Height = 600

$grid = New-Object Windows.Controls.Grid
$column1 = New-Object Windows.Controls.ColumnDefinition
$column2 = New-Object Windows.Controls.ColumnDefinition
$column1.Width = New-Object Windows.GridLength(1, [Windows.GridUnitType]::Star)
$column2.Width = New-Object Windows.GridLength(1, [Windows.GridUnitType]::Star)
$grid.ColumnDefinitions.Add($column1)
$grid.ColumnDefinitions.Add($column2)

$row1 = New-Object Windows.Controls.RowDefinition
$row2 = New-Object Windows.Controls.RowDefinition
$row3 = New-Object Windows.Controls.RowDefinition
$row1.Height = New-Object Windows.GridLength(1, [Windows.GridUnitType]::Star)
$row2.Height = New-Object Windows.GridLength(1, [Windows.GridUnitType]::Auto)
$row3.Height = New-Object Windows.GridLength(1, [Windows.GridUnitType]::Auto)
$grid.RowDefinitions.Add($row1)
$grid.RowDefinitions.Add($row2)
$grid.RowDefinitions.Add($row3)

# テキストボックスの設定
$inputTextBox = New-Object Windows.Controls.TextBox
$inputTextBox.VerticalScrollBarVisibility = 'Visible'
$inputTextBox.TextWrapping = 'Wrap'
$inputTextBox.AcceptsReturn = $true

$outputTextBox = New-Object Windows.Controls.TextBox
$outputTextBox.IsReadOnly = $true
$outputTextBox.VerticalScrollBarVisibility = 'Visible'
$outputTextBox.TextWrapping = 'Wrap'

$grid.Children.Add($inputTextBox)
$grid.Children.Add($outputTextBox)

# オプションのチェックボックス
$checkboxPanel = New-Object Windows.Controls.StackPanel
$checkboxPanel.Orientation = 'Vertical'
$checkboxPanel.HorizontalAlignment = 'Left'

$options = @("メールアドレス", "電話番号", "内線番号", "FAX番号", "URL", "〒から始まる行", "都道府県から始まる住所", "メールの冒頭の挨拶文", "パスワード", "署名", "2行以上の改行")
foreach ($option in $options) {
    $checkbox = New-Object Windows.Controls.CheckBox
    $checkbox.Content = $option
    $checkbox.IsChecked = $true
    $checkboxPanel.Children.Add($checkbox)
}

# 任意の文字列を入力するテキストボックスの設定
$customTextToRemoveTextBox = New-Object Windows.Controls.TextBox
$customTextToRemoveTextBox.Margin = New-Object Windows.Thickness(10, 0, 10, 10)
$customTextToRemoveTextBox.Height = 20

# 任意の文字列を削除するオプションのチェックボックス
$customTextToRemoveCheckBox = New-Object Windows.Controls.CheckBox
$customTextToRemoveCheckBox.Content = "任意の文字列を削除"
$customTextToRemoveCheckBox.IsChecked = $false

# チェックボックスパネルに追加
$checkboxPanel.Children.Add($customTextToRemoveCheckBox)
$checkboxPanel.Children.Add($customTextToRemoveTextBox)

# 置き換えたい文字列を入力するテキストボックスの設定
$replaceFromTextBox = New-Object Windows.Controls.TextBox
$replaceFromTextBox.Margin = New-Object Windows.Thickness(10, 0, 10, 10)
$replaceFromTextBox.Height = 20

# 置き換える文字列を入力するテキストボックスの設定
$replaceToTextBox = New-Object Windows.Controls.TextBox
$replaceToTextBox.Margin = New-Object Windows.Thickness(10, 0, 10, 10)
$replaceToTextBox.Height = 20

# 任意の文字列を置き換えるオプションのチェックボックス
$replaceTextCheckBox = New-Object Windows.Controls.CheckBox
$replaceTextCheckBox.Content = "任意の文字列を置き換える"
$replaceTextCheckBox.IsChecked = $false

# チェックボックスパネルに追加
$checkboxPanel.Children.Add($replaceTextCheckBox)
$checkboxPanel.Children.Add($replaceFromTextBox)
$checkboxPanel.Children.Add($replaceToTextBox)

# テキスト処理関数に任意の文字列を別の文字列に置き換えるロジックを追加
function Process-Text {
    param (
        [string]$text,
        [hashtable]$options,
        [string]$customTextToRemove = "",
        [string]$replaceFrom = "",
        [string]$replaceTo = ""
    )
    # ここにテキスト処理のロジックを追加
    if ($options["メールアドレス"]) {
        $text = $text -replace '\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', ''
    }
    if ($options["電話番号"]) {
        $text = $text -replace '\b\d{2,5}-\d{3,4}-\d{3,4}\b', ''
    }
    if ($options["内線番号"]) {
        $text = $text -replace '\b\d{2}-\d{4}\b', ''
    }
    if ($options["FAX番号"]) {
        $text = $text -replace '\bFAX\s*:\s*\d{2,4}-\d{2,4}-\d{4}\b', ''
    }
    if ($options["URL"]) {
        $text = $text -replace '\bhttps?:\/\/[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|\/))', ''
    }
    if ($options["〒から始まる行"]) {
        $text = $text -replace '(?m)^\s*〒.+$', ''
    }
    if ($options["都道府県から始まる住所"]) {
        $prefectures = '北海道|青森県|岩手県|宮城県|秋田県|山形県|福島県|茨城県|栃木県|群馬県|埼玉県|千葉県|東京都|神奈川県|新潟県|富山県|石川県|福井県|山梨県|長野県|岐阜県|静岡県|愛知県|三重県|滋賀県|京都府|大阪府|兵庫県|奈良県|和歌山県|鳥取県|島根県|岡山県|広島県|山口県|徳島県|香川県|愛媛県|高知県|福岡県|佐賀県|長崎県|熊本県|大分県|宮崎県|鹿児島県|沖縄県'
        $text = $text -replace "(?m)^.*($prefectures).*?$", ''
    }
    if ($options["メールの冒頭の挨拶文"]) {
        $text = $text -replace '(?m)^(お世話になっております。|大変お世話になっております。|いつもお世話になっています。|初めての挨拶|初めまして。|初めてメールをお送りします。|久しぶりの挨拶|ご無沙汰しております。|大変ご無沙汰しております。|返信時の挨拶|早速のご返信ありがとうございます。|メールをお送りくださいましてありがとうございます。|かしこまった挨拶|平素は格別のお引き立てを賜り、厚くお礼申し上げます。).*$', ''
    }

    if ($options["署名"]) {
        $text = $text -replace '(?m)^--.*$', ''
        $text = $text -replace '(?m)^(敬具|よろしくお願いします|宜しくお願い致します|Best regards|Sincerely).*$', ''
    }
    if ($options["2行以上の改行"]) {
        $text = $text -replace '(\r?\n){2,}', "`r`n"
    }
    # 任意の文字列を削除
    if ($options["任意の文字列を削除"] -and $customTextToRemove -ne "") {
        $text = $text -replace [regex]::Escape($customTextToRemove), ''
    }

    # 任意の文字列を別の文字列に置き換える
    if ($options["任意の文字列を置き換える"] -and $replaceFrom -ne "") {
        $text = $text -replace [regex]::Escape($replaceFrom), $replaceTo
    }
    return $text
}

# 処理ボタン
$processButton = New-Object Windows.Controls.Button
$processButton.Content = "処理"
$processButton.Add_Click({
    $selectedOptions = @{}
    foreach ($child in $checkboxPanel.Children) {
        if ($child -is [Windows.Controls.CheckBox]) {
            $selectedOptions[$child.Content] = $child.IsChecked
        }
    }
    $customTextToRemove = $customTextToRemoveTextBox.Text
    $replaceFrom = $replaceFromTextBox.Text
    $replaceTo = $replaceToTextBox.Text
    $outputTextBox.Text = Process-Text -text $inputTextBox.Text -options $selectedOptions -customTextToRemove $customTextToRemove -replaceFrom $replaceFrom -replaceTo $replaceTo
})

$grid.Children.Add($checkboxPanel)
$grid.Children.Add($processButton)

# コントロールの配置
[System.Windows.Controls.Grid]::SetColumn($inputTextBox, 0)
[System.Windows.Controls.Grid]::SetRow($inputTextBox, 0)
[System.Windows.Controls.Grid]::SetColumn($outputTextBox, 1)
[System.Windows.Controls.Grid]::SetRow($outputTextBox, 0)
[System.Windows.Controls.Grid]::SetColumn($checkboxPanel, 0)
[System.Windows.Controls.Grid]::SetRow($checkboxPanel, 1)
[System.Windows.Controls.Grid]::SetColumnSpan($checkboxPanel, 2)
[System.Windows.Controls.Grid]::SetColumn($processButton, 0)
[System.Windows.Controls.Grid]::SetRow($processButton, 2)
[System.Windows.Controls.Grid]::SetColumnSpan($processButton, 2)

$window.Content = $grid
$window.ShowDialog()


この記事が気に入ったらサポートをしてみませんか?