Beispiel #1
0
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
Beispiel #2
0
    def test_inverse(self):
        """ マッチしない言葉を探す """
        query = u'輩'
        detector = StreamDetector(query, inverse=True)

        line = u'吾輩は猫である'
        trove = detector.feed(line)

        eq_(trove.line, line)
Beispiel #3
0
    def test_miss(self):
        """ 形態素にもとづいて文章にマッチしない """
        query = u'輩'
        detector = StreamDetector(query)

        line = u'吾輩は猫である'
        trove = detector.feed(line)

        eq_(trove, None)
Beispiel #4
0
    def test_hit_tokens(self):
        """ 複数の形態素でも文章にマッチする """
        query = u'は猫で'
        detector = StreamDetector(query)

        line = u'吾輩は猫である'
        trove = detector.feed(line)

        eq_(trove.line, line)
        eq_(trove.position, 2)
Beispiel #5
0
    def test_hit(self):
        """ 形態素にもとづいて文章にマッチする """
        query = u'吾輩'
        detector = StreamDetector(query)

        line = u'吾輩は猫である'
        trove = detector.feed(line)

        eq_(trove.line, line)
        eq_(trove.position, 0)
Beispiel #6
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