0

私は本のタイトルのリストを持っています:

  • 「ホビットの冒険70周年記念版」
  • "ホビット"
  • 「ホビットの冒険(イラスト/コレクター版)[あちらこちら]」
  • 「ホビットの冒険:または、そこに戻って」
  • 「ホビット:ギフトパック」

等々...


どういうわけかタイトルを正規化すれば、各版がどの本を参照しているかを知るための自動化された方法を実装する方が簡単だと思いました。

normalised = ''.join([char for char in title 
                       if char in (string.ascii_letters + string.digits)])

また

normalised = ''
for char in title:
  if char in ':/()|':
    break
  normalised += char
return normalised

ただし、タイトルには特殊文字を含めることができ、エディションは基本的に非常に異なるタイトルレイアウトを持つ可能性があるため、明らかに意図したとおりに機能していません。


助けていただければ幸いです!ありがとう :)

4

2 に答える 2

1

それはあなたのデータに完全に依存します。あなたが示した例では、単純な正規化ソリューションは次のようになります。

import re

book_normalized = re.sub(r':.*|\[.*?\]|\(.*?\)|\{.*?\}', '', book_name).strip()

これにより、すべての例で「The Hobbit」が返されます。それが行うことは、最初のコロンの後とそれを含むもの、または角括弧 (通常、四角形、カーリー) 内のもの、および先頭と末尾のスペースをすべて削除することです。

ただし、本によっては実際の本名にコロンや括弧で囲まれた部分があるため、これは一般的なケースではあまり良い解決策ではありません。たとえば、シリーズの名前の後にコロンが続き、その後にシリーズの特定のエントリの名前が続きます。

于 2010-03-16T22:59:09.643 に答える
1

出発点として、あなたが求めていることを実行できると信じているlibrarythingなどのサードパーティのWebサービスを使用することをお勧めします。ドキュメントを参照してください。

http://www.librarything.com/services/rest/documentation/1.0/librarything.ck.getwork.php

于 2010-03-17T02:50:31.223 に答える