banner
朝闻道

朝闻道

做个知行合一的人
email

統一された基準は非常に重要です(目に見えない問題を事前に解決するため)

Python を使って事故報告の死亡者数を掘り下げる#

今日は Python で土木業界の事故報告における死亡者数を識別するための関数を書きます。私の設計思考は以下の通りです:

  1. 観察の結果、80% の事故報告における死亡者数の記録は規則的であり、「XX 人死亡」という形式で、XX は漢字の数字またはアラビア数字のいずれかです。
  2. そこで、私はこのパターンを識別するための正規表現を設計しました。pattern_death = r'([\d\w]+)(人死亡|名工人死亡)'
  3. 安徽省のいくつかの調査報告のテストで、私はこの識別パターンが「XX 人死亡」の前の文字も抽出することに気付きました。例えば、「この工事には 5 人死亡」といった具合です。これは、([\d\w]+)の意味が任意の数の漢字または数字を抽出するためです。
  4. そこで、私は 2 つ目の正規表現を設計しました。pattern_death_num = r'(\d+|[零一二两三四五六七八九十百千万]+)(人死亡|名工人死亡)'、これは前のパターンで識別された文中の数字(中国語またはアラビアのいずれか)を識別するためです。
  5. その後、私はサードパーティのライブラリ cn2an をダウンロードし、中国語の数字を数学的な数字に変換しました。
  6. 識別された数字を辞書に保存し、数字が識別できなかったが、テキスト中に「死亡」が識別された場合は「確認待ち」とマークしました。

ここで私が説明していることは一見簡単そうですが、最初の出発点からこの目的地に到達するまでにどれだけの時間がかかったか、また識別条件を設定し、エラーを避け、識別されたデータを保存するために関数を設計するのにどれだけの時間を費やしたかは、あなたにはわからないでしょう。

多くのエラーを報告し、何度も反復した後、このプログラムは基本的に動作するようになり、この考え方は 393 件の事故報告から 393-56 件の死亡者数を抽出できるようになりました。

あなたはおそらく、図に表示されているのは明らかに 57 件の「確認待ち」のファイルですが、抽出されたデータの数は 383-57 件であるべきではないかと疑問に思うでしょう?

その通りです、欠けている 1 件が今日私が話す主役です。

一字の差の作業量#

この 1 件のデータはずっとエラーを出していました。私は各省のファイルを順番にテストし、問題のあるファイルを見つけなければなりませんでした。

エラーの原因がわかったのは、プログラムは確かに「X 人死亡」を識別し、「X」を抽出しましたが、エラーが出たそのファイルでは「二人死亡」ではなく「两人死亡」を使用していたからです。cn2an という数字を表す中国語をアラビア数字に変換するライブラリは、「二」を認識できても、「两」は認識できません

そこで、私は新しい論理文を設計し、「两」を認識した場合は「二」に変更し、その後cn2anを使ってアラビア数字に変換することにしました。

このエラーの原因を見つけ、問題を解決するための文を作成するのに、約 30 分かかりました。たった 1 文字の差のために、プログラムがこの状況に適応できるようにするには、多くのテストが必要でした。

私はコンピュータ専攻の学生ではありませんが、私が興味を持っているのは、もしかしたら「エラー解決に多くの時間を費やすこと」がソフトウェア開発の常態なのではないかということです?

本題に戻りますが、これは私たちがデータを抽出する際の非常に簡単なステップであり、すべての可能性に適応するためには、その作業量は決して小さくありません。

もしテキストから「事故の性質」のようなデータを抽出する場合、事故の性質を説明する方法は多様であるかもしれません(現時点では不明ですが)、しかしそれは数字よりも複雑であり、文脈には特別な形式がない可能性があります。もし本当にそうであれば、単に正規表現だけでは目的を達成できないかもしれません。

もし正規表現がこの問題を解決できない場合、私が現在持っている情報に基づくと、私たちは複雑な NLP 技術を使用して命名エンティティの単語や意味的論理関係を識別し、機械に文を理解させ、事故の原因を分類する必要があります。そして、このルールセットは、コードが理解できるように既知のデータベースを事前に設定する必要があります。

もし本当に NLP 技術を使用してすべての事故報告から「事故の原因」を抽出する場合、すべての状況に適応するプログラムを作成するためには、その作業量は非常に大きいに違いありません。

なぜこんなに手間がかかるのか#

私たちがデータを抽出する際にこんなに手間がかかるのは、何が原因でしょうか?

答えは明白です。事故報告の大部分の情報の記録方法には統一された形式がないからです。もし形式が統一されていれば、各事故報告に統一されたリストがあれば、すべてのデータは 1 つの正規表現で抽出でき、すべてのファイルに適応できるでしょう。

残念ながら、事故報告の形式には、秦の始皇帝が六国を統一したような偉大な節目はありません。

現在、ChatGPT-4 は必要なデータを自動的に抽出できるはずですが、ただお金が必要です。しかし、私たちの先生は自動識別プログラムを作成させようとしており、少し難しいと言わざるを得ません、ハハ。

秦の始皇帝が六国を統一した#

秦の始皇帝は中国の歴史上初めての統一中央集権の封建国家を築きました。彼は中国を統一しただけでなく、より重要なのは、文字を同じにし、車両の軌道を統一し、行動を同じにし、文字や通貨を統一したことです。

これらの統一は、情報の伝達や規格の統一に役立つだけでなく、私たちの中華文化の継承と発展にも寄与します。

今日、コードを書く中でこの「两」という字が引き起こしたエラーや「事故の性質」を抽出する作業量について考えたとき、統一された基準が無形の問題を解決できるのではないかと考えています。

私はその答えが肯定的であると考えています。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。