分類アルゎリズムの魔法の玹介

ブラむアン・ベレンドによる蚘事の翻蚳。

分析ずデヌタ凊理の理論の研究を始めたずき、あなたは分類アルゎリズムを研究した最初の人の䞀人です。 その本質は簡単です。特定の芳察結果デヌタポむントに関する情報が取埗され、この結果に基づいお特定のグルヌプたたはクラスに属したす。

良い䟋は、電子メヌルスパムフィルタヌです。 着信文字぀たり、芳枬結果を「スパム」たたは「スパムではない」ずしおマヌクし、文字に関する情報送信者、倧文字で始たる単語の数などに焊点を圓おる必芁がありたす。



これは良い䟋ですが、退屈です。 スパムの分類は、講矩、プレれンテヌション、䌚議で䟋ずしお匕甚されおいるので、おそらく既に䜕床も聞いたこずがあるでしょう。 しかし、別のより興味深い分類アルゎリズムに぀いお話したらどうでしょうか 奇劙な䜕か もっず...魔法


そうです 今日はハリヌ・ポッタヌ・゜ヌティング・ハットに぀いおお話したす。 ネットワヌクからデヌタを取埗し、分析しお、キャラクタヌをさたざたな郚門に分類する分類子を䜜成したす。 楜しいはずです

泚
分類噚はそれほど耇雑ではありたせん。 したがっお、ネットワヌクからテキストを抜出しお分析するためのいく぀かの基本的な手法を瀺しお、問題を解決するための「プラむマリアプロヌチ」ず芋なすべきです。 さらに、サンプルサむズが比范的小さいため、 クロス怜蚌などの埓来のトレヌニング手法は䜿甚したせん。 特定のデヌタを収集し、ルヌルに基づいお単玔な分類子を構築し、結果を評䟡するだけです。

2番目の泚
この投皿のアむデアは、 PyData Chicago 2016カンファレンスでのBrian Langの優れたプレれンテヌションに觊発されたした。 ビデオ録画はこちら 、スラむドはこちら 。

ステップ1ネットワヌクからデヌタを取埗する


過去20幎を掞窟で過ごした堎合配垃甚垜子は、グリフィンドヌル、スリザリン、ハフパフ、およびレむブンクロヌの4぀のホグワヌツ孊郚に孊生を配眮する魔法の垜子です。 各孊郚には独自の特城がありたす。 孊生の頭に垜子をかぶるず、圌女は圌の心を読み、どの教授陣が圌に最も適しおいるかを刀断したす。 この定矩によれば、分垃垜子は、スパムフィルタヌであるバむナリ分類子厳密に2぀のグルヌプで䞊べ替えるずは異なり、マルチクラス分類子3぀以䞊のグルヌプで䞊べ替えるです。

孊生を孊郚に割り圓おるには、孊生に関する特定の情報を知る必芁がありたす。 幞いなこずに、十分なデヌタがharrypotter.wikia.comで入手できたす。 このサむトには、孊生や孊郚の説明など、ハリヌ・ポッタヌの䞖界のほがすべおの偎面に関する蚘事が含たれおいたす。 玠晎らしいボヌナスサむトマネヌゞャヌであるFandomは、䜿いやすいAPIず膚倧なドキュメントを提䟛したす 。 やった



pandasずrequestsむンポヌトするこずから始めたしょう。 前者はデヌタの敎理に䜿甚され、埌者はデヌタを受信するためのAPIリク゚ストに䜿甚されたす。

たた、Hogwartsのすべおの生埒を適切に調べお、Distributionの垜子で散らばっおいる孊郚を曞き留める必芁がありたすこれらは、゜ヌトの結果を比范する「実際のデヌタ」になりたす。 このサむトでは、蚘事はホグワヌツの孊生ず映画のように分類されおいたす。 APIを䜿甚するず、特定のカテゎリ内の蚘事のリストを䜜成できたす。

Ravenclawを䟋ずしお取り䞊げたす。 すべおのデヌタをinfo倉数にドロップしおから、Pandas Data Frameに入れたす。

 #   import pandas as pd import requests #      category = 'Ravenclaws' url = 'http://harrypotter.wikia.com/api/v1/Articles/List?expand=1&limit=1000&category=' + category requested_url = requests.get(url) json_results = requested_url.json() info = json_results['items'] ravenclaw_df = pd.DataFrame(info) print('Number of articles: {}'.format(len(info))) print('') ravenclaw_df.head() 

蚘事158


Rodeoを䜿甚しお完党な分析を远跡できたす

泚
Python IDEのRodeoを䜿甚しおいる堎合は、䞊蚘のコヌドをコピヌしお゚ディタヌたたはタヌミナルに貌り付けおください。 結果は[履歎]たたは[タヌミナル]りィンドりに衚瀺されたす。 ボヌナスマりスでりィンドりをドラッグするだけで、堎所ずサむズを倉曎できたす。



このデヌタに基づいお、次のこずがわかりたす。


 #   houses = ['Gryffindor', 'Hufflepuff', 'Ravenclaw', 'Slytherin'] mydf = pd.DataFrame() #  ID , URL    for house in houses: url = "http://harrypotter.wikia.com/api/v1/Articles/List?expand=1&limit=1000&category=" + house + 's' requested_url = requests.get(url) json_results = requested_url.json() info = json_results['items'] house_df = pd.DataFrame(info) house_df = house_df[house_df['type'] == 'article'] house_df.reset_index(drop=True, inplace=True) house_df.drop(['abstract', 'comments', 'ns', 'original_dimensions', 'revision', 'thumbnail', 'type'], axis=1, inplace=True) house_df['house'] = pd.Series([house]*len(house_df)) mydf = pd.concat([mydf, house_df]) mydf.reset_index(drop=True, inplace=True) #   print('Number of student articles: {}'.format(len(mydf))) print('') print(mydf.head()) print('') print(mydf.tail()) 

孊生に関する蚘事の数748


蚘事のコンテンツを取埗する


蚘事のIDを䜿甚しお、コンテンツのリク゚ストを開始できたす。 しかし、蚘事のいく぀かは巚倧であり、信じられないほどの詳现が含たれおいたす。 ハリヌ・ポッタヌずノォルデモヌトに関する蚘事をご芧ください



すべおの䞻芁キャラクタヌに関する蚘事には、「個性ずキャラクタヌの特城」ずいうセクションがありたす。 ここから、ディスペンシングハットが意思決定に䜿甚する情報を抜出するこずは論理的です。 しかし、そのようなセクションはすべおの蚘事に含たれおいるわけではないため、そのセクションのみに泚目するず、文字数が倧幅に枛少したす。

以䞋のコヌドは、各蚘事から「人栌ず性栌特性」セクションを抜出し、その長さ文字数を蚈算したす。 次に、IDに基づいお、このデヌタを最初のmydfデヌタフレヌムず結合したす少し時間がかかりたす。

 #        "     "    #     -    ,     #     text_dict = {} for iden in mydf['id']: url = 'http://harrypotter.wikia.com/api/v1/Articles/AsSimpleJson?id=' + str(iden) requested_url = requests.get(url) json_results = requested_url.json() sections = json_results['sections'] contents = [sections[i]['content'] for i, x in enumerate(sections) if sections[i]['title'] == 'Personality and traits'] if contents: paragraphs = contents[0] texts = [paragraphs[i]['text'] for i, x in enumerate(paragraphs)] all_text = ' '.join(texts) else: all_text = '' text_dict[iden] = all_text #    DataFrame     "   " text_df = pd.DataFrame.from_dict(text_dict, orient='index') text_df.reset_index(inplace=True) text_df.columns = ['id', 'text'] text_df['text_len'] = text_df['text'].map(lambda x: len(x)) #        mydf_all = pd.merge(mydf, text_df, on='id') mydf_all.sort_values('text_len', ascending=False, inplace=True) #   DataFrame    ,     "   " mydf_relevant = mydf_all[mydf_all['text_len'] > 0] print('Number of useable articles: {}'.format(len(mydf_relevant))) print('') mydf_relevant.head() 

察象蚘事の数94



ステップ2NLTKを䜿甚しお教員特性を取埗する


孊生の数がわかったので、孊郚に孊生を分散させる必芁がありたす。 これを行うには、各孊郚の特性のリストを䜜成したす。 harrypotter.wikia.comから収集を始めたしょう。

 trait_dict = {} trait_dict['Gryffindor'] = ['bravery', 'nerve', 'chivalry', 'daring', 'courage'] trait_dict['Slytherin'] = ['resourcefulness', 'cunning', 'ambition', 'determination', 'self-preservation', 'fraternity', 'cleverness'] trait_dict['Ravenclaw'] = ['intelligence', 'wit', 'wisdom', 'creativity', 'originality', 'individuality', 'acceptance'] trait_dict['Hufflepuff'] = ['dedication', 'diligence', 'fairness', 'patience', 'kindness', 'tolerance', 'persistence', 'loyalty'] 

すべおの単語は名詞であるこずに泚意しおください。 これはいいです。 キャラクタヌの特城を蚘述する際には䞀貫性が必芁です。 それらのいく぀かは名詞ずしお提瀺されなかったので、䞀般的な順序にそれらをもたらしたす


各孊郚の特性のリストを受け取ったら、「テキスト」列をスキャンしお、文字の説明で察応する単語が䜿甚された回数を蚈算できたす。 簡単そうですね。



残念ながら、それだけではありたせん。 Neville Longbottomに぀いおの「 人栌ず性栌特性 」セクションのフレヌズを次に瀺したす。

圌が若かったずき、ネノィルは䞍噚甚で、物忘れで、恥ずかしがり屋で、倚くの人が圌がti病に芋えたのでグリフィンドヌルの教授陣には適さないず考えおいたした。

圌がずおも献身的だった友人の支揎のおかげ; Remus Lupine教授の3幎目の研究で圌の恐怖に立ち向かうむンスピレヌション。 そしお、圌の䞡芪の拷問者が自由に歩き回るずいう事実は、ネノィルは勇敢になり、圌自身により自信を持ち、ノォルデモヌトず圌の死喰い人ずの戊いで無私無欲になりたした。

圌が若かったずき、ネノィルは䞍噚甚で、物忘れで、恥ずかしがり屋だった。

圌は非垞に忠実だった圌の友人の支揎により、レムス・ルパン教授が3幎目の恐怖に盎面するように励たし、䞡芪の拷問が緩んでいるこずを知る動機付けで、ネノィルはより勇敢になり、ノォルデモヌトLordず圌のデスむヌタヌずの戊いに専念し、 献身的に取り組んでいたす。

匷調衚瀺された単語は、䞀郚の孊郚に有利に数えられるべきですが、圢容詞であるため数えられたせん。 たた、「勇敢に」や「勇気」などの単語はカりントされたせん。 分類アルゎリズムが正しく機胜するためには、同矩語、反意語、その他の単語圢匏を識別する必芁がありたす。

同矩語


nltkモゞュヌルNLTK-Natural Language Toolkitに含たれおいる英語の語圙デヌタベヌスであるWordNetのsynsets関数を䜿甚しお、同矩語をsynsetsこずができたす。 「シンセット」は「同矩語セット」、同矩語のコレクション、たたは「補題」です。 synsets関数は、特定の単語に関連付けられおいる同矩語のセットを返したす。

困った コヌドを実行しおから解析しおみたしょう。

 from nltk.corpus import wordnet as wn #      foo1 = wn.synsets('bravery') print("Synonym sets associated with the word 'bravery': {}".format(foo1)) foo2 = wn.synsets('fairness') print('') print("Synonym sets associated with the word 'fairness': {}".format(foo2)) foo3 = wn.synsets('wit') print('') print("Synonym sets associated with the word 'wit': {}".format(foo3)) foo4 = wn.synsets('cunning') print('') print("Synonym sets associated with the word 'cunning': {}".format(foo4)) foo4 = wn.synsets('cunning', pos=wn.NOUN) print('') print("Synonym sets associated with the *noun* 'cunning': {}".format(foo4)) print('') #   (""),    synset foo_list = [foo1, foo2, foo3, foo4] for foo in foo_list: for synset in foo: print((synset.name(), synset.lemma_names())) 

「勇気」ずいう蚀葉に関連付けられた同矩語セット[Synset 'courage.n.01'、Synset 'fearlessness.n.01']
単語「fairness」に関連付けられた同矩語セット[Synset 'fairness.n.01'、Synset 'fairness.n.02'、Synset 'paleness.n.02'、Synset 'comeliness.n .01 ']
単語「wit」に関連付けられた同矩語セット[Synset 'wit.n.01'、Synset 'brain.n.02'、Synset 'wag.n.01']
「cunning」ずいう単語に関連付けられた同矩語セット[Synset「craft.n.05」、Synset「cunning.n.02」、Synset「cunning.s.01」、Synset「crafty.s」 .01 '、Synset' clever.s.03 ']
名詞「cunning」に関連付けられた同矩語セット[Synset 'craft.n.05'、Synset 'cunning.n.02']
「勇気.n.01」、「「勇気」、「勇気」、「勇気」、「勇気」」「fearlessness.n.01」、[「勇気」、「勇気」]「公平さ。 n.01 '、['公平性 '、'公平性 ']' fairness.n.02 '、['公平性 '、'公平性 '、'率盎さ '、'率盎性 ''淡さ.n。 02 '、['青癜さ '、'金髪 '、'公平性 ']' comeliness.n.01 '、['面癜さ '、'公平性 '、'愛らしさ '、'矎人 ']' wit.n. 01 '、['りィット '、'ナヌモア '、'ナヌモア '、'りィティティズム '、'りィティネス ']' brain.n.02 '、[' brain '、' brainpower '、' learning_ability '、' mental_capacity ' 、 'mentality'、 'wit'] 'wag.n.01'、['wag'、 'wit'、 'card'] 'craft.n.05'、['craft'、 'craftiness' 、「c」、「fox」、「gu」、「s」、「 '」]「cunning.n.02」、[「c」

そのため、倚くの出力が埗られたした。 いく぀かのポむントず朜圚的な問題を考慮しおください。


お気づきかもしれたせんが、 synset関数は䞍芁な同矩語のセットを提䟛する堎合がありたす。 たずえば、 paleness.n.02 「自然でcomeliness.n.01肌を持぀」ずcomeliness.n.01 「芋栄えが良くお魅力的」は、「公平」ずいう蚀葉にも関連付けられおいたす。 これらの特性は明らかにハッフルパフずは関係ありたせん ネノィルロングボトムはハンサムに成長したしたがので、分析からそのようなセットを手動で陀倖する必芁がありたす。

翻蚳同矩語を取埗するのは思ったより難しい



反意語ず単語圢匏


すべおの同矩語を収集した埌、反意語ずさたざたな単語の圢匏に泚意する必芁がありたすたずえば、「勇気」-「勇敢」、「勇敢」、「勇敢」に関連しお。 nltkでは倚くのハヌドワヌクを行うこずができたすが、分詞ず圢容詞を比范/最䞊玚で手動で入力する必芁がありたす。

 #    (),         "bravery" foo1 = wn.synsets('bravery') for synset in foo1: for lemma in synset.lemmas(): print("Synset: {}; Lemma: {}; Antonyms: {}; Word Forms: {}".format(synset.name(), lemma.name(), lemma.antonyms(), lemma.derivationally_related_forms())) print("") 

シンセットcourage.n.01; 補題勇気; 反意語[補題 'cowardice.n.01.cowardice']; Word Forms[補題 'brave.a.01.courageous']
シンセットcourage.n.01; 補題勇気; 反意語[]; Word Forms[補題 'brave.a.01.courageous']
シンセットcourage.n.01; 補題勇気; 反意語[]; Wordフォヌム[]
シンセットcourage.n.01; 補題勇気; 反意語[]; 単語圢匏[補題 'brave.a.01.brave'、補題 'audacious.s.01.brave']
シンセットfearlessness.n.01; 補題倧胆䞍敵; 反意語[補題 'fear.n.01.fear']; 単語圢匏[補題 'audacious.s.01.fearless'、補題 'unafraid.a.01.fearless']
シンセットfearlessness.n.01; 補題勇気; 反意語[]; Wordフォヌム[]

すべおをたずめる


次のコヌドは、孊郚の各機胜の同矩語、反意語、単語圢匏のリストを䜜成したす。 完党を期すために、䞀郚の単語のスペルが正しくない堎合がありたす。

 #   ,    relevant_synsets = {} relevant_synsets['Ravenclaw'] = [wn.synset('intelligence.n.01'), wn.synset('wit.n.01'), wn.synset('brain.n.02'), wn.synset('wisdom.n.01'), wn.synset('wisdom.n.02'), wn.synset('wisdom.n.03'), wn.synset('wisdom.n.04'), wn.synset('creativity.n.01'), wn.synset('originality.n.01'), wn.synset('originality.n.02'), wn.synset('individuality.n.01'), wn.synset('credence.n.01'), wn.synset('acceptance.n.03')] relevant_synsets['Hufflepuff'] = [wn.synset('dedication.n.01'), wn.synset('commitment.n.04'), wn.synset('commitment.n.02'), wn.synset('diligence.n.01'), wn.synset('diligence.n.02'), wn.synset('application.n.06'), wn.synset('fairness.n.01'), wn.synset('fairness.n.01'), wn.synset('patience.n.01'), wn.synset('kindness.n.01'), wn.synset('forgivingness.n.01'), wn.synset('kindness.n.03'), wn.synset('tolerance.n.03'), wn.synset('tolerance.n.04'), wn.synset('doggedness.n.01'), wn.synset('loyalty.n.01'), wn.synset('loyalty.n.02')] relevant_synsets['Gryffindor'] = [wn.synset('courage.n.01'), wn.synset('fearlessness.n.01'), wn.synset('heart.n.03'), wn.synset('boldness.n.02'), wn.synset('chivalry.n.01'), wn.synset('boldness.n.01')] relevant_synsets['Slytherin'] = [wn.synset('resourcefulness.n.01'), wn.synset('resource.n.03'), wn.synset('craft.n.05'), wn.synset('cunning.n.02'), wn.synset('ambition.n.01'), wn.synset('ambition.n.02'), wn.synset('determination.n.02'), wn.synset('determination.n.04'), wn.synset('self-preservation.n.01'), wn.synset('brotherhood.n.02'), wn.synset('inventiveness.n.01'), wn.synset('brightness.n.02'), wn.synset('ingenuity.n.02')] # ,      def get_forms(lemma): drfs = lemma.derivationally_related_forms() output_list = [] if drfs: for drf in drfs: drf_pos = str(drf).split(".")[1] if drf_pos in ['n', 's', 'a']: output_list.append(drf.name().lower()) if drf_pos in ['s', 'a']: #  + "-ness"  +  &   if len(drf.name()) == 3: last_letter = drf.name()[-1:] output_list.append(drf.name().lower() + last_letter + 'er') output_list.append(drf.name().lower() + last_letter + 'est') output_list.append(drf.name().lower()+'ness') output_list.append(drf.name().lower()+'ly') elif drf.name()[-4:] in ['able', 'ible']: output_list.append(drf.name().lower()+'r') output_list.append(drf.name().lower()+'st') output_list.append(drf.name().lower()+'ness') output_list.append(drf.name()[:-1].lower()+'y') elif drf.name()[-1:] == 'e': output_list.append(drf.name().lower()+'r') output_list.append(drf.name().lower()+'st') output_list.append(drf.name().lower()+'ness') output_list.append(drf.name().lower()+'ly') elif drf.name()[-2:] == 'ic': output_list.append(drf.name().lower()+'er') output_list.append(drf.name().lower()+'est') output_list.append(drf.name().lower()+'ness') output_list.append(drf.name().lower()+'ally') elif drf.name()[-1:] == 'y': output_list.append(drf.name()[:-1].lower()+'ier') output_list.append(drf.name()[:-1].lower()+'iest') output_list.append(drf.name()[:-1].lower()+'iness') output_list.append(drf.name()[:-1].lower()+'ily') else: output_list.append(drf.name().lower()+'er') output_list.append(drf.name().lower()+'est') output_list.append(drf.name().lower()+'ness') output_list.append(drf.name().lower()+'ly') return output_list else: return output_list #      #    ,      ,    ,      import copy new_trait_dict = copy.deepcopy(trait_dict) antonym_dict = {} #      ()   ;    (  )    for house, traits in trait_dict.items(): antonym_dict[house] = [] for trait in traits: synsets = wn.synsets(trait, pos=wn.NOUN) for synset in synsets: if synset in relevant_synsets[house]: for lemma in synset.lemmas(): new_trait_dict[house].append(lemma.name().lower()) if get_forms(lemma): new_trait_dict[house].extend(get_forms(lemma)) if lemma.antonyms(): for ant in lemma.antonyms(): antonym_dict[house].append(ant.name().lower()) if get_forms(ant): antonym_dict[house].extend(get_forms(ant)) new_trait_dict[house] = sorted(list(set(new_trait_dict[house]))) antonym_dict[house] = sorted(list(set(antonym_dict[house]))) #    print("Gryffindor traits: {}".format(new_trait_dict['Gryffindor'])) print("") print("Gryffindor anti-traits: {}".format(antonym_dict['Gryffindor'])) print("") 

グリフィンドヌル仕様['bold'、 'bolder'、 'boldest'、 'boldly'、 'boldness'、 'brass'、 'brassier'、 'brassiest'、 'brassily'、 'brassiness'、 'brassy'、 'brave 「、」勇敢、「勇気」、「勇敢」、「勇気」、「勇敢」、「頬」、「チヌキヌ」、「チヌキヌ」、「チヌキヌ」、「チヌキヌ」、「生意気」、「階士道」、 「勇気」、「勇気」、「勇気」、「勇気」、「勇気」、「勇気」、「倧胆」、「顔」、「倧胆䞍敵」、「倧胆䞍敵」、「倧胆䞍敵」、「倧胆䞍敵」、「倧胆䞍敵」 '、' gallantry '、' hardihood '、' hardiness '、' heart '、' mettle '、' nerve '、' nervier '、' nerviest '、' nervily '、' nerviness '、' nervy '、' politesse '、 「spunk」、「spunkier」、「spunkiest」、「spunkily」、「spunkiness」、「spunky」]

グリフィンドヌルの反特性['co病'、 '恐怖'、 '、病'、 'tim病者'、 'チミデスト'、 'tim病'、 'tim病'、 'tim病']

 # ,             from itertools import combinations def test_overlap(dict): results = [] house_combos = combinations(list(dict.keys()), 2) for combo in house_combos: results.append(set(dict[combo[0]]).isdisjoint(dict[combo[1]])) return results #   ;   "False" print("Any words overlap in trait dictionary? {}".format(sum(test_overlap(new_trait_dict)) != 6)) print("Any words overlap in antonym dictionary? {}".format(sum(test_overlap(antonym_dict)) != 6)) 

文字特性蟞曞に繰り返しはありたすか 停

反意語の蟞曞の繰り返し 停



ステップ3孊郚ごずに孊生を配垃する


孊郚ごずに孊生を配垃する時が来たした 分類アルゎリズムは次のように機胜したす。


「人栌ず性栌特性」セクションに「アリスは勇敢だった」ずいう文だけがあるずしたす。 その埌、アリスはグリフィンドヌルで1ポむント、残りの孊郚で0ポむントを獲埗したす。 したがっお、アリスはグリフィンドヌルに陥りたす。

 #  "word_tokenize",       from nltk import word_tokenize # ,   def sort_student(text): text_list = word_tokenize(text) text_list = [word.lower() for word in text_list] score_dict = {} houses = ['Gryffindor', 'Hufflepuff', 'Ravenclaw', 'Slytherin'] for house in houses: score_dict[house] = (sum([True for word in text_list if word in new_trait_dict[house]]) - sum([True for word in text_list if word in antonym_dict[house]])) sorted_house = max(score_dict, key=score_dict.get) sorted_house_score = score_dict[sorted_house] if sum([True for i in score_dict.values() if i==sorted_house_score]) == 1: return sorted_house else: return "Tie!" #   print(sort_student('Alice was brave')) print(sort_student('Alice was British')) 

グリフィンドヌルネクタむ

機胜が機胜しおいるようです。 それをデヌタに適甚し、䜕が起こるかを確認したす

 #   pd.options.mode.chained_assignment = None mydf_relevant['new_house'] = mydf_relevant['text'].map(lambda x: sort_student(x)) mydf_relevant.head(20) 




 print("Match rate: {}".format(sum(mydf_relevant['house'] == mydf_relevant['new_house']) / len(mydf_relevant))) print("Percentage of ties: {}".format(sum(mydf_relevant['new_house'] == 'Tie!') / len(mydf_relevant))) 

マッチ0.2553191489361702
匕き分け0.32978723404255317



うん 他の結果を期埅しおいたした。 ノォルデモヌトがハッフルパフに来た理由を調べおみたしょう。



 #   -- tom_riddle = word_tokenize(mydf_relevant['text'].values[0]) tom_riddle = [word.lower() for word in tom_riddle] #        ,          words_dict = {} anti_dict = {} houses = ['Gryffindor', 'Hufflepuff', 'Ravenclaw', 'Slytherin'] for house in houses: words_dict[house] = [word for word in tom_riddle if word in new_trait_dict[house]] anti_dict[house] = [word for word in tom_riddle if word in antonym_dict[house]] print(words_dict) print("") print(anti_dict) 

{'スリザリン'['野望']、 'レむブンクロヌ'['むンテリゞェント'、 'むンテリゞェント'、 'メンタル'、 '個人'、 'メンタル'、 'むンテリゞェント']、 'ハフパフ'['皮類'、 'loyalty'、 'true'、 'true'、 'true'、 'loyalty']、 'Gryffindor'['brave'、 'face'、 'bold'、 'face'、 'bravery'、 'brave'、 「勇気」、「勇気」]}
{'スリザリン'[]、 'Ravenclaw'['common']、 'Hufflepuff'[]、 'Gryffindor'['fear'、 'fear'、 'fear'、 'fear'、 'fear'、 「恐怖」、「co病」、「恐怖」、「恐怖」]}

ご芧のずおり、スリザリンの埗点1-0= 1ポむント、レむブンクロヌ-6-1= 5、ハッフルパフ-6-0= 6、グリフィンドヌル-8-9= -1

すべおの孊生の䞭で最も長いノォルデモヌトの「個性ず特性」のセクションでは、蟞曞ず䞀臎したのは31語のみでした。 これは、おそらく他の孊生ずの詊合が倚かったこずを意味したす。 ぀たり、デヌタが少なすぎるこずに基づいお分類を決定したす。これは、゚ラヌの割合が高く、描画が倚いこずを説明しおいたす。

結論


䜜成した分類噚はうたく機胜したせん掚枬するよりも少し正確ですがが、アプロヌチが単玔化されたこずを忘れないでください。 最近のスパムフィルタヌは非垞に耇雑で、特定の単語の存圚に基づいお分類されたせん。 したがっお、より倚くの情報を考慮に入れるように、アルゎリズムを改善できたす。 :


API nltk, . , Python, .

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


All Articles