def _register(self, text):
        helper = YahooHelper()
        # ヒントの数が16個に足りないものは、登録しない
        hints = helper.get_hints(text)

        if len(hints) < 16:
            return

        # これ以降はデータストアの登録/更新が確定しているため、offset値を取得しておく
        offset = long(time.time()) + answer.Answer.get_random_offset()
        logging.info('convert-long')

        # 答え(text)にユニークキー制約をもたせられないので、そのプロパティが存在するかチェックし、put()
        q = db.Query(answer.Answer)
        q.filter('text =', text)
        result = q.get()

        if result:
            # すでに登録されている答えは、最新のヒントで上書きする
            result.hints = hints
            result.offset = offset
            result.put()

        else:
            # 新規の答えを追加する
            furigana = helper.get_furigana(text)

            a = answer.Answer(
                              text=text,
                              furigana=furigana,
                              hints = hints,
                              offset=offset
                              )
            a.put()
Beispiel #2
0
    def analyze_status(self, status):
        # http/httpsで始まるURLは、無意味な文字列なので除去する
        text = re.sub(URL_PATTERN, '', status.GetText())

        # 登録しないツイート
        # api.GetUserTimeline()にて、公式RTは取得しないようにしているため、その分のチェックは不要
        if re.match('@', text):     # リプライ
            return

        # 非公式RT/QT
        if re.search(UNOFFICIAL_RETWEET_PATTERN, text):
            return


        # ツイートのテキストを解析する
        helper = Yahoo(api_config.Yahoo.APPLICATION_ID)
        chips = []
        chipTexts = []
        for chunk in helper.get_chunk_list(text):
            chip, chipText = self.analyze_feature(chunk, len(chips))

            if chip:
                chips.append(chip)

            chipTexts.append(chipText)

        # 登録しないツイート (その2)
        if len(chips) == 0:         # 名詞のないもの
            return


        # 文書データクラスを保存する
        q = sentence.Sentence(
                              key_name=unicode(status.GetId()),
                              screenName=status.GetUser().GetScreenName(),
                              text=text,
                              chippedText=''.join(chipTexts),
                              chips=chips,
                              rand=random.random()
                              )
        q.put()