グループの名称から区切り文字で同一キーワードをPytyhonで抽出

特定グループ毎の 同一キーワードをPytyhonで抽出

カテゴリ毎に名称があるリストで、同一名称を抜き出したいニーズがあります。例えば、カテゴリと名称の組み合わせがあるデータ(左図)を元に、categolyをkeyにnameと同じ名称を抽出しました(右図)

元データ

categolyname
12tsutech プログラム講座 lesoon1
12tsutech プログラム講座 lesoon2
12tsutech プログラム講座 lesoon3
22tsutech DX支援プラン説明会 1回目
22tsutech DX支援プラン説明会 2回目

プログラム実行結果

この手法は様々な用途に使うことができます。

  • 抽出したキーワードを元にデータの文字揺れを確認する
  • グループ名称を作成する
  • データ欠損地を把握し、充足対応する
    など

データ量1万超えレベルですと、目視ではなく機械的にチェックや名称生成するメリットが出てきます。本記事では、上記ケースを参考例として、どのようなプログラムで解決するかをご紹介いたします。

目次

Pytyhonを利用して、グループ単位の同一名称を抽出するロジック

ライブラリのインストール

import pandas as pd

pandasがインストールがまだの方は下記コマンドでインストール

pip install pandas

pipインストールができない場合はPythonでpip installが使えない時のプロキシとSSL無視をご覧くださいませ。

サンプルデータ作成


df1 = pd.DataFrame({
    "categoly": ["1","1","1","2","2"],
    "name": ["2tsutech プログラム講座 lesoon1",
             "2tsutech プログラム講座 lesoon2",
             "2tsutech プログラム講座 lesoon3",
             "2tsutech DX支援プラン説明会 1回目",
            "2tsutech DX支援プラン説明会 2回目"]
})

上記コマンドで下記のDataFrameがdf1の変数に格納されます。

categolyname
12tsutech プログラム講座 lesoon1
12tsutech プログラム講座 lesoon2
12tsutech プログラム講座 lesoon3
22tsutech DX支援プラン説明会 1回目
22tsutech DX支援プラン説明会 2回目

ロジック全体像

グループ毎に同一名称を抽出するには下記機能を組み合わせればできます。

  1. 名称を特定ルールで区切り単語単位にする
  2. グループ毎に上記1の単語を比較し、同じ単語を抽出する
  3. 抽出した単語の並び順を最初の文字に合わせる

名称を特定ルールで区切り単語単位にする

同一名称を区切るには自然言語処理(分かち書き)などありますが、ここでは空白で区切る例を考えてみます。test1.split(‘ ’)を利用することで全角スペースがあった時に文字を区切っています。

test1="2tsutech プログラム講座 lesoon1"

test1.split(' ')

#結果
['2tsutech', 'プログラム講座', 'lesoon1']

グループ毎に上記1の単語を比較し、同じ単語を抽出する

共通名称を抽出するのはsetを利用し、set(リスト1)&set(リスト2)とすることで共通キーワードを抽出してくれます。

test1=['2tsutech', 'プログラム講座', 'lesoon1']
test2=['2tsutech', 'プログラム講座', 'lesoon2']

set(test1)&set(test2)

#結果
#{'2tsutech', 'プログラム講座'}

データをグループ単位にループ文で回して上記処理を繰り返すことでグループ毎の共通名称を得ることができます。

抽出した単語の並び順を最初の文字に合わせる

抽出した単語をそのままにすると並び順が変になることがあります。例えば、同一名称をつなげてグループ名称にする場合に単語の順番が変わってしまったら全く意味が変わってしまいます。

並び順無視:プログラム講座 2tsutech
並び順考慮:2tsutech プログラム講座

元々あるテキストを区切り文字で区切って連結する場合は必ずテキストの並び順を意識することが重要です。sortedとlambdaを組み合わせると以前と並び順を意識したグループ名称に変換できます。下記の”名称”には変数が入る想定です。

sorted("名称",key = lambda x:"名称".index(x))

スクリプト・ツールのご提供

今回ご紹介した手法を用いた自動ロジックの提供は有料にてご対応いたします。実際の動きを確認したい場合はサンプルデータをいただければ数件自動処理したデータをご提供いたします。

  • exe提供 ※おすすめ
  • スクリプト提供
  • Webアプリ制作

など、ご要望に応じてご対応いたします。

ご希望でしたら下記グーグルフォームから必要事項をご記入願います。記載いただくメールアドレスに回答を返信させていただく予定です。メールアドレスはお間違えのないようご入力ください。※最近間違いが多く、返信できないことがあります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

著者:ブロガー2つ(につ)

■サイト設立目的
人海戦術の時代からテクノロジー活用による自動化促進の時代に変化。テクノロジー活用を促進するための情報共有やテクノロジー支援を行います。

目次