Пример #1
0
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))
Пример #2
0
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)
Пример #3
0
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)
Пример #4
0
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}
Пример #5
0
    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])