前提・実現したいこと
GitHub上にあったツイッターとpersonality insightsを使ったコードを用いて、ツイッターのIDを入力する所をtextareaに変えて、その文章を分析させるというシステムをHTMLとPythonで作ろうとしています。
その過程でtextareaに入力した文章がPython側で何故か1文字しか識別してくれなく、watsonが使えなくて困っております。
どうすればこのエラーが解決できるかを教えていただけると幸いです。
よろしくお願いいたします。
発生している問題・エラーメッセージ
ibm_cloud_sdk_core.api_exception.ApiException: Error: The number of words 1 is less than the minimum number of words required for analysis: 100, Code: 400
該当のソースコード
html
1<form class="user_input__form" action="/result" method="post" name="userinputform"> 2 <p> 3 テキストを入力してください: <textarea name="my_user_name" rows="5" wrap="hard"></textarea> 4 </p> 5 <p> 6 <input type="submit" value="本を探す"> 7 </p> 8 </form>
python
1def get_personality(): 2 3 api_version = "2017-10-13" 4 authenticator = IAMAuthenticator('password') 5 6 personality_insights = PersonalityInsightsV3( 7 version =api_version , 8 authenticator = authenticator, 9 ) 10 personality_insights.set_service_url('URL') 11 12 profile = personality_insights.profile( 13 content = "text", 14 content_type = "text/plain", 15 accept = "application/json", 16 content_language = "ja", 17 accept_language = "en", 18 raw_scores = True, 19 ) 20 21 return profile 22 23def convert_dict_to_json(orig_dict, indent = 4): 24 return json.dumps(orig_dict) 25 26def load_json_as_dict(json_name): 27 with open("./" + json_name, "r") as json_file: 28 return json.load(json_file, object_pairs_hook = OrderedDict) 29 30def sort_personality(tweet_result): 31 return sorted(tweet_result.items(), key = lambda x: x[1], reverse = True) 32 33 34 35def main(my_user_name): 36 37 tweet_personality_dict = get_personality() # ツイートを結合したデータをAPIに入力 38 # ツイートから分析した性格の名前 39 personality_name = [big5["name"] for big5 in tweet_personality_dict["personality"]] 40 # 性格の値。小数点第2位で四捨五入した後、decimal.Decimalからfloatに変換している。 41 # 参考サイト(四捨五入):https://note.nkmk.me/python-round-decimal-quantize/ 42 personality_percentile = [float(Decimal(str(big5["percentile"])).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)) \ 43 for big5 in tweet_personality_dict["personality"]] 44 45 # ユーザのツイートの分析結果 46 all_tweets_big5 = OrderedDict(zip(personality_name, personality_percentile)) 47 48 # { my_user_id: { personality_name1: percentile1, personality2: percentile2, ... } } 49 user_personality_dict[my_user_name] = all_tweets_big5 50 # print("finished analyzing all({}) tweets.".format(len(tweets))) 51 52 # Agreeableness: 協調性, Conscientiousness: 真面目さ, Emotional range: 精神的安定性, Extraversion: 外向性, Openness: 開放性 53 # 参考サイト:https://note.nkmk.me/python-math-factorial-permutations-combinations/ 54 big5_list = ["Agreeableness", "Conscientiousness", "Emotional range", "Extraversion", "Openness"] 55 56 # big5から2つの性格を選ぶ組み合わせを列挙する 57 category_patterns = [set(pat) for pat in itertools.combinations(big5_list, 2)] 58 59 # ユーザのツイートのカテゴリ分けを記録する辞書 60 user_tweet_category_table = OrderedDict() 61 62 # ユーザのツイートの分析結果を、値の大きい順にソートする 63 sorted_result = sort_personality(user_personality_dict[my_user_name]) 64 65 # big5のうち大きい順から2番目までの値の性格名のみを取得し、その本のカテゴリとする(例:{Openness, Extraversion}) 66 # この時、複数の性格の順番を考慮させないために、setで用意する 67 # 2つを組み合わせているため、1つだけの場合よりも幅広くカテゴリ分けできそう 68 tweet_category = {big5_elm[0] for big5_elm in sorted_result[0:2]} 69 user_tweet_category_table[my_user_name] = tweet_category 70 71 72 user_personality = user_tweet_category_table[my_user_name] 73
一部ソースコードのままの粗く、雑なコードですがご了承ください、、、
補足情報(FW/ツールのバージョンなど)
あなたの回答
tips
プレビュー