SF小説の評価、またはIMDBを本のために優先的に使用し、司書と一緒に行う

長い間、「アルゴリズム」、「閲覧室」、「私はPR」のいずれかを選択していましたが、最終的にはデータマイニングに立ち寄りました。

この話は10月下旬に始まり、私はもう一度読みたいものを選択しようとしました。 個人的に、私は休暇中または旅行中にSFから何かを取ります(それらのほとんどが存在すると思うように)。

そして、選択の苦しみに苦しめられて、私は検索で「本のためのIMDB」を獲得しました...そして、まともなものを見つけませんでした。 インターネット全体に書籍のアドバイザリーサービスがあふれており、それらはすべて完全にナンセンスです。 たとえば、「最高のファンタジーとファンタジー」セクションのトップimkhonetは次のとおりです。

1.マスターとマルガリータ。 ミハイル・ブルガコフ、1940
2.アルジャーノンの花(短編)。 ダニエル・キーズ、1959
3.アルジャーノンのための花。 ダニエル・キーズ、1966
4.王の戦い。 ジョージ・マーティン、1998
5.騎士団:玉座の剣。 セルゲイ・サドフ、2000
6.オレホフの鳩小屋。 ヴラディスラフ・クラピビン、1983


ええと...これは、フィクションのランキングの最初の場所で見られるとはまったく予想していませんでした。 「私たちは反対の方向に進みます」と私は思いました。 通常の読者評価を見つけるという考えを捨てて、私はWikiに行き、HugoとNebulaの受賞者のリストを見つけて、実際に以前と同じように数冊の本を選びました。

「しかし、名誉ある賞品を基礎として本の評価を混乱させることはできますか?」私は突然考えました。 そして泥だらけ。 会う: top-books.info



そのため、次のことを行う必要がありました。

1.候補者と賞品の受賞者のログを検索して解析します。
2.それらから本と著者のリストを形成する。
3.各本に評価を割り当てます。
4.各本に写真と説明を見つけて貼り付けます。
5.各著者に簡単な履歴書を見つけて貼り付ける。
6.これらすべてについて検索を行うため。
7.投票用紙を締めます。

そして今、もっと...

プレミアムログ



私は、Hugo、Nebula、Locusの3つの賞に限定することにしました。 他のすべては高度に専門化されているか、最近与えられました。

ウィキから取ったヒューゴと星雲の勝者と候補者のリスト:
en.wikipedia.org/wiki/Hugo_Award_for_Best_Novel
en.wikipedia.org/wiki/Nebula_Award_for_Best_Novel

軌跡はもっと複雑です。 年ごとに候補者のリストを収集する必要がありました。
www.locusmag.com/SFAwards/Db/Locus.html

さらに、これらのリストには膨大な数の候補者がおり、それぞれ20人がほとんど何も言わなかった。 だから私は、ベストノベルカテゴリ(1971年から1981年に発行)とSFノベルとファンタジーノベルカテゴリ(1982年から2011年)の最初の5人にノミネートした。

本と著者



私は、この最高のものを世界最高の言語-JavaScriptで書かれたスクリプトで整理しました。 ヒューゴとネビュラはそれを簡単に整理しました(ウィキペディアはまだ同じスタイルのデザインを順守しています)。 Locusログの分析は次のようになりました。

parseBook = function (s) { var alternates = /\([^\)]+title ([^\)]+)\)/.exec(s); if (alternates) { var alternateTitle = trim(alternates[1]).replace(/^"/, '').replace(/"$/, ''); s = s.replace(alternates[0], ''); } s = s.replace(/ \(.+\)$/, ''); var parts = s.split(', '), delimeter = parts.length - 1; if (delimeter > 1 && parts[delimeter].indexOf('Jr') == 0) { delimeter--; } var title = trim(parts.slice(0, delimeter).join(', ')).replace(/^"/, '').replace(/"$/, ''), author = trim(parts.slice(delimeter).join(', ')); if (author.indexOf(' & ') != -1) { author = author.split(' & '); } return { title: alternateTitle ? [title, alternateTitle] : title, author: author } } 


その結果、次の著者リストのようなものが得られました。

  "ae-van-vogt": { "fullName": "Vogt, AE van", "alias": "ae-van-vogt", "firstName": "A.", "middleName": "E.", "lastName": "Vogt", "preposition": "van" }, "kurt-vonnegut": { "fullName": "Vonnegut, Kurt", "alias": "kurt-vonnegut", "firstName": "Kurt", "middleName": "", "lastName": "Vonnegut", "preposition": "" }, 


そして、ここに本のリストがあります:

  "the-boy-who-bought-old-earth": { "see": "the-planet-buyer" }, "dune": { "alias": "dune", "title": "Dune", "awards": { "1965": [ { "award": "nebula", "won": true } ], "1966": [ { "award": "hugo", "won": true } ] }, "authorAlias": "frank-herbert" }, "and-call-me-conrad": { "alias": "and-call-me-conrad", "title": [ "...And Call Me Conrad", "This Immortal" ], "awards": { "1966": [ { "award": "hugo", "won": true } ] }, "authorAlias": "roger-zelazny" }, "this-immortal": { "see": "and-call-me-conrad" }, 


軌跡の候補者にはまだ場所フィールドがあります-占有された場所です。 ヒューゴと星雲は、候補者のランキングを提供していません。

評価



私はいくつかのオプションを試しましたが、最終的にこの式に落ち着きました。

評価= 6 + 3 *(合計(s [i]))/可能賞+年合計/ 100

ここで、possibleAwardsは、本が理論的に受け取ることができる賞の数(=本が出版された年に発行された賞の数)、yearTotalは本が出版された年の受賞候補者の総数、s [i]は各賞について本が獲得したスコアです。

s [i]は次のように考えられました。1、本が賞を獲得した場合。 1 /本がヒューゴまたは星雲にノミネートされたが、賞品を受け取っていない場合の候補者の数。 (候補者の数-撮影場所+ 1)/軌跡の申請者の候補者の数。

合計で、各本は、ショートリストで賞を獲得したという事実について、そのように6ポイントを獲得しました。 受け取った保険料に応じて、0〜3ポイント(合計6〜9)。 (a)候補者のリストがまだないときに最初に賞品を受け取った本を少し悲観するために、その年の候補者の総数/ 100の形で小さな修正を加えます。 (b)ある年に多くの候補者がいた場合、その年全体が以前のものよりも成功したという理由で。

たとえば、「シャリオンの呪い」を取り上げます。

  "the-curse-of-chalion": { "alias": "the-curse-of-chalion", "title": "The Curse of Chalion", "awards": { "2002": [ { "award": "hugo", "won": false }, { "award": "locus", "won": false, "category": "fantasy novel", "place": 3 } ] }, "authorAlias": "lois-mcmaster-bujold" } 


本は、ヒューゴ指名で0.16(6)ポイント(6人中1人)+軌跡で0.6ポイント(5人中3位)+本が参加した賞の応募者総数(6 + 5)で0.11を獲得します。 合計:6.9。

その結果、トップ10は次のフォームを取得しました。

9.2アメリカの神々/ガイマン、ニール
9.2パラディンオブソウルズ/ Bujold、Lois McMaster
9.1永遠の戦争/ホルデマン、ジョー
9.1神そのもの/アシモフ、アイザック
9.1デューン/ハーバート、フランク
9.1 Ringworld / Niven、ラリー
9.1 Startide Rising / Brin、David
9.1死者のためのスピーカー/カード、オーソン・スコット
9.1終末の書/ウィリス、コニー
9.1イディッシュ警察官組合/チャボン、マイケル


数十人のうち、私は個人的に「魂のパラディン」、「砂丘」、「神自身」を読んだだけでしたが、トップ10での彼らの存在は十分に思えました。

著者の評価



著者の評価で苦しむ必要がありました。 私は、たくさんの良い本を持っている著者が、著者の上の一番上にいることを望んでいましたが、とても良いです。 私は多くの公式を試し、これに落ち着きました:

評価=(合計+ 3)/(n + 1)

ここでsumは著者の本の評価の合計、nは本の数です。 この式は、各著者が評価3の架空の本を数えるという事実と実際に同等であり、少数の本で著者を悲観的にすることができます。 最終的にトップ10は次のようになりました。

1ハインライン、ロバートA
2 Le Guin、Ursula K.
3アシモフ、アイザック
4カード、オーソンスコット
5ブジョール、ロイス・マクマスター
6コニー・ウィリス
7デヴィッド・ブリン
8ホルデマン、ジョー
9クラーク、アーサーC.
10ポール、フレデリク

このトップは完全に私を満足させた:)

鉱山本データ



Amazon Product Advertising APIから書籍に関する情報を収集しました-アフィリエイトプログラムの一環として、Amazonは販売する出版物に関する情報の使用を許可しています。 私は写真と説明に興味がありました。 一般的に、作業のスキームは次のとおりです。

1.本を選ぶ
2.著者の1人によるフィルターを使用して、書籍のタイトルをリクエストします
3.回答に同じタイトルと著者のアイテムを探しています
4.一意の識別子(ASIN)とレビューを作成します。
5.何かが見つからない場合は、別の見出し(本に複数の見出しがある場合)または別の索引で検索を試みます。

私は最初にKindleストアのインデックスで検索し(進行状況とそのすべてを検索しています)、次に紙の本で検索しました。 その結果、580冊の本のうち378冊がKindleストアで見つかりました。

Amazon PAAPIを非常に適切に検索しますが、最初の場所に残っている回答がいくつかあります。 APIが発音区別符号を完全に無視し、 Miévilleのような著者やTales ofNevèrÿonのような見出しを見つけられない唯一のものは、最終的には手作業で検索する必要がありました。

著者に関する最小限のデータ



著者は、ウィキメディアAPIを介してウィキペディアからフックする必要がありました。 正直に言うと、自転車は同じです。 その結果、著者によるリクエストの90%は名と姓だけでうまく機能しましたが、一般的な名前を持つ10%は手作業で再構築する必要がありました。 名前に加えて、「author」や「fantasy writer」などを検索クエリに追加すると、一意でない名前の10%が正常に機能し始めますが、残りの90%は完全に壊れます。

その結果、著者ごとに、ウィキペディアから記事の前文を引き出しました。 ウィキペディアの編集者各位、プリアンブルのガイドラインは本当に気にしません。 多くの記事は船長によって厳しく与えられ(例えばDavid Brin )、前文の他の部分では作曲全体が書かれています( Isaac Asimov )。

検索する



まあ、あまり選択肢はありませんでした-Googleカスタム検索エンジン。 私はCSSを使って自分が望む場所に配置する必要がありましたが、うまくいくようです。

ちなみに、Google CSEにはAmazonとは逆の問題があります-Mievilleが検索を拒否したことによると、Miévilleを獲得する必要があります。

投票



承認とコメントを保持したくなかったので、Facebookを使用することにしました。

紳士、2gis APIおよびLeaflet APIの開発者! 許して! APIはFBと比較しておとぎ話です。 こんなに組織化されず、うんざりするほど文書化されたAPIを見たことはありません。 このカヌーを締めるのにほぼ1週間の苦労が必要でした。

紳士Facebook開発者! ドキュメントを整理しましょう! 完全に機能することは不可能です。

ロシア語版



最初の計画にはロシア語版の作成も含まれていましたが、結局のところ、ロシア語のコンテンツを引き出すことはできません。 Ozoneには独自のAPIがなく、ロシアのWikiと著者の半分は知らない。 だからこの場所は失敗でいっぱいです。

それでは、次は何ですか?



特になし。 紳士、サイエンスフィクション愛好家-お楽しみください。 私の意見では、評価は十分すぎるほどです。 (実験として、私はリストのNo. 1を読みました-ニールガイマンの「 アメリカの神々 」。非常にクールな本、私はあなたに報告します。)評価が間違っているように思える場合-投票を歓迎します。 初期評価の重みは1000票であるため、それらを殺すのは簡単ではありません。 個人的には、私の意見では、「 チャリオン呪い 」、「 陰鬱な10月の夜 」、「もう一方の風 」を大いに過小評価していました

私はすぐに、文学賞には敬意を表する真剣な読書があることを警告します。したがって、面白いフィクションはランキングで非常に弱く提示されます。 同じことは、残念ながら、サイエンスフィクションの先駆者にも当てはまります。文学は60年代以降のランキングで広く表現されており、以前のものは断続的です。 (ちなみに、自発的な任意の決定により、9.0のロードオブザリング評価と8.0のホビット評価を追加しました。さもなければ、シルマリオンだけのトールキンは奇妙に見えました。)

評価(国内フィクションを含む)への新しい到着はありません。初期評価を多少なりとも確実に与える方法ができるまではありません。 これが誰かに興味がある場合(そして、私は怠け者ではない)、同じ原理に基づいて古典小説の評価をさらに台無しにすることができます。

一般的に、お楽しみください!

UPD Habraffect、Habraffect ... 3%CPU、8%メモリ。

Source: https://habr.com/ru/post/J137632/


All Articles