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()
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()