「ファゞヌ正芏衚珟」でアドレスを解析したす

抂芁自然蚀語衚珟の特定の蟞曞、特に郜垂の䜏所ず比范するために曞いたラむブラリに぀いお。



おじいちゃんの村ぞ



地理的な意味で、䜏所を蚘述する方法はいく぀ありたすか



タスクを単玔化し、家番号、建物、土地、アパヌトなどのあらゆる皮類の小さなものを砎棄しおも -そしお同じ郜垂内で働く-通りの名前、広堎、私道、路地などを曞くためにいく぀のオプションを思い぀くこずができたすか



簡単な䟋を挙げたす。

ツノェトチナダ通り -「st。 「花」および「花通り」-さらに、「通り」はスキップできたす垂内に花の広堎がない堎合。「花」は、「花」たたは「花」ず同様に゚ラヌで蚘述できたす-すべおそれは芪指に芋えたす



䟋はもっず耇雑です

第2銬軍通り -ここでは、詩人の魂に歩き回る堎所がありたす。 数字は「2nd」たたは単に「2」ず衚珟するこずも、「Second」ずいう蚀葉で、たたは「Second」ずいう略語で曞くこずもできたす。回答者の玄50で「horse」ず「army」の間にハむフンが発生したす。 ヒヌプには、「銬軍」が長い間誰かに芋え、「2 Konnoarm」に瞮小されたこずがわかりたす。 st。」



他の興味深い䟋は、「st。 セヌラヌゞェレズニャック」たたは単に「ゞェレズニャック」、「Pr。 モリサ・トレザ」たたは「マリサ・テレサ」ず同様に完党に叙事詩的な事件」 埌半の3行目 "、" Rybatskoe村ぞの道 "、" st。 むゟラ川の巊岞」-私自身がメモリからそれらを正しく曞き蟌めなかった堎合はご容赊ください。



たあこれはビゞネスの幞せです



想像しおみおください。 アプリケヌションを開発しおいるこず、これはずりわけ、すべおの地理を「くし」にする぀たり、統䞀された倖芳に導く必芁がありたす。 2011幎にこの問題に遭遇したした。䜏所を含む広告を印刷する前にプログラムで凊理する必芁がありたした。



ビゞネスの芳点から、「コヌミング」の必芁性は、いく぀かの理由で関連しおいたした-同じただし異なる衚蚘アドレスで耇数の広告を発行しないか、眰金を埗るこずができるブラックリストに登録されたアドレスで広告を発行しないオブゞェクトなど叞法調査などが行われおいる䞍動産



さらに、たずえば、フラワヌストリヌトでは、サンクトペテルブルクのさたざたな地域で6人を数えたした。 そのため、指定された゚リアにあるかどうかを確認し、そうでない堎合は近くの道路を怜玢するために、通りを敎理する必芁がありたした。



このタスクが私の手に枡る前に、同じ目的のための叀いアプリケヌションは、特別な人-オペレヌタヌ-のサヌビスを䜿甚したした。オペレヌタヌは数時間にわたっお玄30,000行を通過し、圌の裁量で修正したした。 いく぀かの理由であたり䟿利ではありたせんでした。 オペレヌタヌがおかしな癖を持っおいるこずを含めお-知らなかった通りの90をKolpinoに送信したす。 その結果、保存された蟞曞ファむルを確認したずころ、他のすべおの゚リアを合わせたよりもコルピノ地区に倚くの道路が芋぀かりたした。



...そしおプログラマヌも幞せです



以前のバヌゞョンのアプリケヌションがオペレヌタヌのサヌビスを䜿甚したのはなぜですか



゜フトりェアがアドレスを凊理するには、いく぀かの明癜なトリックが必芁であるず掚枬するのは簡単です。 䞊叞や同僚から聞いた興味深い提案の䞭には次のものがありたす。





実隓ずアプロヌチ



適切なアドバむスを芋぀けるために必死、私は実隓し始めたした。 ファゞィ文字列比范アルゎリズムに぀いおりィキペディアで読みたした。 やっおみた 確かに、単語ず単語を比范するために、これは悪くありたせん。



しかし、「st。 宮殿「ず」pl。 宮殿-ここでは、「y」を「p」に眮き換えるのはタむプミスではありたせんが、アルゎリズムの芳点からは、「Palace」を「Door」に眮き換えるのず同じ重さです。



さお、行を単語に分割しスペヌスなど、それらのタむプミスを個別に蚈算しおから、平均倀のようなものを定矩したす。たたは、各単語の最倧誀差を誀差の掚定倀ずしたす。



このアむデアはすでに興味深いものになりたした。 しかし、略語の問題、単語の䞊べ替え、オプションの単語の省略「Aleksandr Matrosov Street」-「Aleksandra」は䜕かを芋逃す可胜性が高い-圌女はただ解決したせんでした。



考え盎すこずなく、これらのルヌルを蚘述するための「メタ蚀語」を䜜成するこずにしたした。 䜕が起こったのか、「Java甚のファゞヌ正芏衚珟解析ラむブラリ」ず呌びたした。



特定の匏ずの「調敎」機胜に加えお、匏の䞀郚を盎接眮換するためのルヌルを正確に蚘述できるず䟿利であるこずがわかりたした。



簡単な説明



蚀語の構文は、括匧に察する私の倧きな愛情を瀺しおいたす。 匏ず郚分匏は角かっこで囲たれ、匏のタむプは巊角かっこに続く文字によっお決たりたす。 読みやすくするために、䞞括匧、角括匧、および䞭括匧を䜿甚できたす。䞻なこずは、開き括匧ず閉じ括匧がペアで䞀臎するこずです。



=通り、花



蚘号「=」は、単語が指定された順序で、たたは逆に存圚する必芁があるこずを意味したす。 この衚珟は、「Flower Street」たたは「Flower Street」のいずれかに察応したす。



そしお、はい、蚱容されるタむプミスの数は、比范のためにオブゞェクトを䜜成するずきのしきい倀によっお蚭定されたす。デフォルトでは75で、「Tsvyatochnaya」や「Ulitsa Tsvitoshnaya」たでスキップできたす。



バラク、フセむン、オバマ、2番目



特殊文字を含たない括匧内のコンマで区切られた単語は、単語チェヌンがこの順序で期埅されるこずを意味したす。 しかし、蚘号「」で括匧で囲たれた匏 オプションの郚分、぀たり 存圚しない堎合はスキップされ、゚ラヌの蚈算には圱響したせん。 この堎合、バラク・フセむン・オバマ、バラク・オバマII、さらにはバラック・アバマも完党に認められたす。



^りラゞミヌル、レヌニン、ニキヌタ、フルシチョフ、カヌル、マルクス



蚘号「^」は、リストされた郚分匏の1぀を遞択するこずを意味したす。この堎合、匏はリストされた3぀の数字のいずれかず比范できたすが、「りラゞミヌルマルクス」ず「ニキヌタレヌニン」は機胜したせん。



他の衚珟がありたす-数倀の範囲ずの和解あいたい比范を適甚するのは䞍䟿です、明確な正芏衚珟ずの和解予期しないこずですが、圹に立぀かもしれたせん-略語ず和解する可胜性もありたす「*」蚘号を䜿甚名前付きグルヌプをキャプチャしおさらに確認するか、眮換ずしお䜿甚したす。これはすべおドキュメントで説明したした。



眮換機胜は倧きな匏に関連するようになりたす。簡朔で関連する䟋を挙げるのは困難ですが、詊しおください



[^^ Vlad *、Vladimir、B| Vova〜A | Dear_ $ A、^ Al *、Alexander、Sasha| Sasha〜B | Nasty_ $ B]〜C | Hello_ $ C



芋た目はかさばっおいたすが、本質はシンプルです-さたざたなスタむルの「Vladimir」ずいう名前は「Hello Dear Vova」に眮き換えられ、Alexanderのさたざたなバヌゞョンが異なっお歓迎されたす。 眮換が指定されおいないフラグメントは、パタヌン自䜓で眮換する必芁がありたすしたがっお、たずえば、「Vova」の眮換ではない堎合、「Vlodimer」は「Vladimir」に眮換されたす。



おわりに



垂内の18地区の街路甚にコンパむルした匏合蚈18の匏は130キロバむトのファむルに収たりたすただし、むンデントやその他のフォヌマット芁玠を含む。蟞曞を䜜成するのに玄2週間かかりたした。 埌に、この地域の集萜のリストに同様の䜕かを䜜成する必芁がありたした。 このスパムをここに投皿しようずしおいないこずをご容赊いただければ幞いです。代わりに、囜名の解析に䜿甚される衚珟の䞋に远加したす。



ラむブラリは䞍安定なロヌルを行っおいたす。 問題をかなり狭い範囲で解決したす自然蚀語凊理の分野のその他の倚くのタスクでは適合したせん。 数幎の間、私は玄1000のダりンロヌドを芋おいたす。 5人が手玙ず質問に答えたした。 英語の堎合、ロシア語ず同じ圢匏のあいたいな比范はあたり効果的ではないこずに泚意しおください誀字に察しおは効果的ですが、英語では単語の発音が発音ずは異なるため、発音゚ラヌには効果的ではありたせん



プリミティブアルゎリズムを曞き換えるこずが蚈画されおいたした-タヌミナルのオプション芁玠には䞍愉快な欠点があり、プログラムで匏を接着するこずは䞍可胜になりたした-しかし、私は新しい仕事の堎所に行き、このタスクバヌゞョン2.0リリヌスは深い「todo」になりたした。プロゞェクトをリファクタリングできたすこのプロゞェクトは、私のJavaキャリアの最初に生たれたした。 自分の奜みに合わせおこのビゞネスを続けたいず思っおいる人がいるなら、私は嬉しいだけです



参照資料



Java甚のファゞヌ正芏衚珟は、実際には私のラむブラリです。



Javadocs-「ファゞヌ正芏衚珟」の蚀語のドキュメントず詳现な説明



TREはファゞヌ比范の可胜性がある別の正芏衚珟ラむブラリCです。䜿甚方法に぀いおは考えおいたせんでした。Javaバヌゞョンがなく、眮換が必芁でした。 その䞭の比范゚ラヌも異なる方法で評䟡されたすが、他のタスクでは圹立ちたす。



Damero-Levenshteinは、匏内の単䞀の単語を比范するために内郚で䜿甚した、人気のある単玔なファゞヌ比范アルゎリズムです。



玄束された䟋





囜を「ずかす」衚珟の䟋-ロシア囜倖の䞍動産広告に䜿甚されたした。 私はそれを遞んだのは、それが郜垂の地名の衚珟よりも幟分単玔であり、同時に同様の目的で「そのたた」䜿甚できるからです。 嫌に芋えないように短瞮されおいたすが、完党版はこちらから入手できたす 。



 ^
    アブハゞア、オヌストラリア、オヌストリア、アれルバむゞャン、アルバニア、アルゞェリア、アンギラ、
    アンゎラ、アンドラ、アルれンチン、アルメニア、アルバ、アフガニスタン、バハマ、
    バングラデシュ、バルバドス、バヌレヌン、ベリヌズ、ベルギヌ、ベナン、バミュヌダ、
 // ...
    フィゞヌ、フィリピン、フィンランド、フランス、クロアチア、チャド、モンテネグロ、
    チェコ共和囜、チリ、スむス、スりェヌデン、スバヌルバル諞島、゚クアドル、゚リトリア、゚ストニア、
    ゚チオピア、ゞャマむカ、日本、
     [^Connected *、State *、Amer *、America、USA、USA] |アメリカ合衆囜、
 // ...
     [^コモロ、コモロ*、@ ISLAND] |コモロ、
     [^コンゎ、ブラザビル、@ REPUB、コンゎ] |コンゎ共和囜、
     [^ Zaire、DRC、{^ DR、Democre *、@ REPUB}、Congo] | DR_Congo、
 // ...
     [^ビルマ、ミャンマヌ] |ミャンマヌ、
     [@ISLAND、メむン] |マン島、
     [ナゎルノ*、-、カラ*、@ REPUB] |ナゎルノ・カラバフ共和囜、
     [^オランダ、オランダ] |オランダ、
 // ...
     [ゆう*、オセチア] | South_Ossetia、
     [^南アフリカ、{^南アフリカ*、{南*、-、Afr *}、@ REPUB}] |南アフリカ共和囜、
     [ナヌ*、スヌダン] | South_Sudan
 

 ::島^島*、{o、-、in *}
 :: REPUB^ p、rep、rep * *



All Articles