1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

知財のあれこれをPythonで何とかする

Posted at

段落番号を何とかする

明細書の段落番号(【0001】、【0002】・・・)をリナンバーするプログラムです。
なお半角→全角変換のためライブラリ(mojimoji)を使っていますので、プログラム実行前にインストール(pip install mojimoji)が必要です。

Program1.py
import re
import mojimoji
import unicodedata

#part1 前処理
meisai = []
ms_base = []
f = open('meisai.txt', 'r')#ANSIで保存すること
ms_base = f.read()
f.close()
ms_base=unicodedata.normalize("NFKC", ms_base)#請求項数の数値を半角にする
meisai = re.split("",ms_base)#段落ごとに分割する
meisai.pop(0)
with open('renum.txt', 'w') as f:#書込み先ファイルをクリアする
     print("", file=f)

#part2 リナンバー
pattern = "[0-9]{4}】"#{n}に桁数を設定
i=1 #開始番号
for m in meisai:
    if re.search(pattern, m):
        matches = re.sub(pattern, "",m)
        formatted_numbers = f'{i:04d}'#{i:0nd}のnに桁数を設定
        text = formatted_numbers+matches
        i+=1
    else:
        text = ""+m.lstrip() #先頭のスペースを削除して【を付ける
    text = text.rstrip("\n")#文末改行を削除
    text = mojimoji.han_to_zen(text, digit=True)#半角→全角

    with open('renum.txt', 'a') as f:
        print(text, file=f)        

以下のサンプルをファイル名「meisai.txt」としてANSI形式で保存します。

サンプルデータ
【発明の詳細な説明】
【技術分野】
【0001】
  本開示は、情報処理技術に関する。
【背景技術】
【0002】
 従来は、○○であった。
【0003】
 特許文献1には、△が開示されている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】 特開2024-12345号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
  しかしながら、考えられる。
【0010】
  そこで本開示は、技術を提供することを目的とする。
【課題を解決するための手段】
【0015】
  本開示の一態様に係る情報処理装置は、特徴とする。
【発明の効果】
【0020】
  本開示によれば、改善することができる。
【図面の簡単な説明】
【0010】
【図1】システムの構成を示す図。
【図2】操作UIの外観を示す図。
【図3】制御系の構成を示すブロック図。
【図4】制御処理を示すフローチャート。
【図5】動作例1を説明する図。
【図6】動作例2を説明する図。
【図7】動作例3を説明する図。
【発明を実施するための形態】
【0011】
  以下、本開示に係る実施形態について、図面を参照して説明する。
【0012】
  <<実施形態1>>
  本実施形態では、○○ができる。
【0012】
  <システムの構成>
  図1は、本実施形態における情報処理システムの構成を示す図である。
program1を実行すると以下の様に段落番号がリナンバーされた明細書を作成しrenum.txtに書き込み保存します。
リナンバー済みデータ

【発明の詳細な説明】
【技術分野】
【0001】
  本開示は、情報処理技術に関する。
【背景技術】
【0002】
 従来は、○○であった。
【0003】
 特許文献1には、△が開示されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】 特開2024-12345号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
  しかしながら、考えられる。
【0006】
  そこで本開示は、技術を提供することを目的とする。
【課題を解決するための手段】
【0007】
  本開示の一態様に係る情報処理装置は、特徴とする。
【発明の効果】
【0008】
  本開示によれば、改善することができる。
【図面の簡単な説明】
【0009】
【図1】システムの構成を示す図。
【図2】操作UIの外観を示す図。
【図3】制御系の構成を示すブロック図。
【図4】制御処理を示すフローチャート。
【図5】動作例1を説明する図。
【図6】動作例2を説明する図。
【図7】動作例3を説明する図。
【発明を実施するための形態】
【0010】
  以下、本開示に係る実施形態について、図面を参照して説明する。
【0011】
  <<実施形態1>>
  本実施形態では、○○ができる。
【0012】
  <システムの構成>
  図1は、本実施形態における情報処理システムの構成を示す図である。

プログラムのポイント

  • (part1)
    meisai.txtのデータを【で分割してリストmeisaiに代入します。この時に文頭の【が失われるため以降の処理は【が無い状態を前提に処理しています。

  • (part2)
    以下の処理ではpattern(正規表現で”[0-9]{4}】”)と一致した場合に、段落番号が文頭にあると判定してre.sub(pattern, "",m)でpatternの部分を削除(""に置換え)し、文頭にf'【{i:04d}】を追加します。iはカウントアップする値、04dは4桁(段落番号の標準的な桁数)を示しますので4桁のカウントアップする値が【】内に書き込まれますので、【0001】、【0002】・・の連続した段落番号が生成されます。

    if re.search(pattern, m):
        matches = re.sub(pattern, "",m)
        formatted_numbers = f'{i:04d}'#{i:0nd}のnに桁数を設定
        text = formatted_numbers+matches
        i+=1

文頭が段落番号でない場合、文頭のスペースを削除して再度【を追加します。

    else:
        text = ""+m.lstrip() #先頭のスペースを削除して【を付ける

renum.txt書き込み前に文末改行を削除し半角数値を全角に変換します。

    text = text.rstrip("\n")#文末改行を削除
    text = mojimoji.han_to_zen(text, digit=True)#半角→全角

段落番号の開始番号を1以外の値にしたい場合は以下のiの設定値を変更してください。

i=1 #開始番号

注意点

数値の半角→全角処理を入れているので、段落番号以外の数値も全角になります。意図して半角にしたい場合は注意ください。

最後に

今回のようなちょっとした文字列処理をする場合に、正規表現とかループ処理といったpythonの文字列処理機能のメリットが発揮できると思います。今回もCopilotの力を借りて作成しましたが、AI機能はpythonの開発効率を非常に高めてくれると実感しています。
今回の記事がお役に立てれば幸いです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?