def entity(ctx, app_id, sentence_file, json_flag, sentence, class_filter, request_id): # type: (Context, unicode, Optional[IO], bool, unicode, unicode, unicode) -> None # NOQA """ Extract unique representation from sentence. """ app_id = clean_app_id(app_id) sentence = clean_sentence(sentence, sentence_file) if class_filter: class_filter = class_filter.replace(',', '|') api = GoolabsAPI(app_id) ret = api.entity(sentence=sentence, class_filter=class_filter, request_id=request_id) if json_flag: click.echo(format_json(api.response.json())) return for ne in ret['ne_list']: click.echo(','.join(ne))
class QuestionGenerator(object): def __init__(self, text: str, goolab_api_key: str): """ GoolabAPIを使用して文字列から問題作成をするクラス :param text: 問題作成用文字列 :param goolab_api_key: goolabのAPI Key """ self.text = text self.goolab = GoolabsAPI(goolab_api_key) self.keywords = self.__get_keywords() self.questions = self.__create_questions() def __get_keywords(self): """ textパラメータからGoolabAPIを使用してキーワード抽出 :return: キーワードリスト """ keywords = [] if not self.text: return [] ret = self.goolab.entity(sentence=self.text, class_filter=u"PSN|ORG|ART|DAT") for idx in range(len(ret['ne_list'])): key = (ret['ne_list'][idx][0], ret['ne_list'][idx][1]) keywords.append(key) return keywords def __create_questions(self): """ 抽出したキーワードに文章を付加して問題文を生成する 生成した問題文を”リスト”で返すことに注意 :param keyword: 抽出したキーワード :return questions: 生成した問題文 """ # カテゴリ別で問題を作成 questions = [] for key in self.keywords: if key[1] == 'PSN': questions.append(key[0] + 'は何をしたか?') questions.append(key[0] + 'について説明せよ。') elif key[1] == 'ART': questions.append(key[0] + 'とは何か?') questions.append(key[0] + 'は誰が考案したか?') elif key[1] == 'DAT': questions.append(key[0] + 'には何が起こったか?') elif key[1] == 'ORG': questions.append(key[0] + 'はいつ作られたか?') questions.append(key[0] + 'について説明せよ。') return questions def get_questions(self, max_questions: int = 3): """ 問題文リストからランダムに問題を返す :param max_questions: 問題数 :return: ランダムに選択された問題文リスト """ n_ques = len(self.questions) if max_questions > n_ques: max_questions = n_ques return random.sample(self.questions, max_questions)
from goolabs import GoolabsAPI import configparser config = configparser.ConfigParser() config.read('config.ini') app_id = config['gooAPI']['id'] api = GoolabsAPI(app_id) ret = api.entity(sentence=u"鈴木さんがきょうの9時30分に横浜に行きます。") print(ret)
def get_promise_content(letter): api = GoolabsAPI(GOO_API_KEY) index = 0 # letter = "クリスマスに岩見と一緒に東京駅に来て" # 時刻情報正規化API # chrono_response = api.chrono(sentence=letter) # 固有表現抽出API entity_response = api.entity(sentence=letter) # 形態素解析API # morph_response = api.morph(sentence=letter) date = '' hour = '' min = '' place = '' for i in range(len(entity_response["ne_list"])): # 日付の抽出 if entity_response["ne_list"][i][1] == "DAT": day_response = api.chrono(sentence=entity_response["ne_list"][i][0]) if len(day_response['datetime_list']) != 0: date = day_response["datetime_list"][0][1] # 約束内容の要素番号を算出 day = entity_response["ne_list"][i][0] index = letter.find(day) + len(day) # 時間の抽出 elif entity_response["ne_list"][i][1] == "TIM": time_len = len(entity_response["ne_list"][i][0]) for j in range(time_len): if entity_response["ne_list"][i][0][j] == u"時": hour = entity_response["ne_list"][i][0][0:j] hour_n = j # 約束内容の要素番号を算出 time = entity_response["ne_list"][i][0] index = letter.find(time) + len(time) if j != time_len - 1: if entity_response["ne_list"][i][0][j + 1] == u"半": min = "30" elif entity_response["ne_list"][i][0][j] == u"分": min = entity_response["ne_list"][i][0][hour_n + 1:j] elif entity_response["ne_list"][i][1] == "LOC": place = entity_response["ne_list"][i][0] # 約束内容を出力 # 約束内容の最初の文字に格助詞が入ってるか調べる morph_response = api.morph(sentence=letter[index:len(letter)]) if morph_response["word_list"][0][0][1] == u"格助詞" or morph_response["word_list"][0][0][1] == u"読点": par_len = len(morph_response["word_list"][0][0][0]) content = letter[index + par_len:len(letter)] else: content = letter[index:len(letter)] return {'date': date, 'hour': hour, 'min': min, 'content': content, 'place': place}
db="Wordrop", user="******", passwd="root", charset="utf8") cur = connector.cursor() cur.execute("select * from home;") app_id = "2d84d0d734ebefeb1f4dcf8ae106ec9d2f3b72a5be084a1014d6e27a9002ffef" api = GoolabsAPI(app_id) response = api.morph(pos_filter="名詞", sentence=tex) #sentenceにある言葉を形態素解析する value = response["word_list"] #形態素解析の結果を代入 \ response = api.entity(sentence=value) #名詞の固有表現を求める \ list = response.values() pp(value) response = api.entity(sentence=value[0][0][0]) print type(value) ss = [] count = 0 for v in value[0]: pp(value[0][count][0]) response = api.entity(sentence=value[0][count][0])