def detect(query, file): detector = StreamDetector(query) for binary_line in iter(file.readline, b''): unicode_line = binary2unicode(binary_line) trove = detector.feed(unicode_line) yield trove
def test_inverse(self): """ マッチしない言葉を探す """ query = u'輩' detector = StreamDetector(query, inverse=True) line = u'吾輩は猫である' trove = detector.feed(line) eq_(trove.line, line)
def test_miss(self): """ 形態素にもとづいて文章にマッチしない """ query = u'輩' detector = StreamDetector(query) line = u'吾輩は猫である' trove = detector.feed(line) eq_(trove, None)
def test_hit_tokens(self): """ 複数の形態素でも文章にマッチする """ query = u'は猫で' detector = StreamDetector(query) line = u'吾輩は猫である' trove = detector.feed(line) eq_(trove.line, line) eq_(trove.position, 2)
def test_hit(self): """ 形態素にもとづいて文章にマッチする """ query = u'吾輩' detector = StreamDetector(query) line = u'吾輩は猫である' trove = detector.feed(line) eq_(trove.line, line) eq_(trove.position, 0)
def _dispatch(target, query, inverse): detector = StreamDetector(query, inverse) with target.file as file_: binary = file_.read() encoding = get_encoding(binary) if encoding is None: # エンコードが不明 (おそらくバイナリファイルだった) return [] text = binary.decode(encoding) # XXX: ファイルの改行コードも検出すべきだろうか? lines = text.split(os.linesep) troves = [] for line in lines: trove = detector.feed(line) if trove is None: continue troves.append(trove) return troves