2008-02-29 22:05:05
昨日の方法でも、その検索対象が頻出語でなければいいのだが、すぐ近くに続けて姿を見せるときには判りにくい結果表示になってしまう。重なって出てくる場合は逃してしまう。普通の文章なら重なることはあまりないと思うが、例えば、「そんなわけ、ないないない!」という文を「ないない」で検索したとき、「『ないない』ない」と「ない『ないない』」の二つを拾えるかどうかということである。塩基配列の検索に応用したいときにも、これができるかどうかは大きな意味を持つ(かも知れない)。
そこで昨日の、文書を検索語で分割して処理するところを以下のように変更してみる。文書の頭からの位置もこれなら表示できる。検索文字列が検索対象範囲内に見つからない場合は-1が返ってくるので、以下のように書いてみた。
strt = 1 while strt > 0: pos = txt.find(word,strt) if pos == -1: break left = txt[pos-20:pos] right = txt[pos:(pos + len(word) + 20)] print left + right + " : " + '%s' %(pos) strt = pos + 1というようにして、python kwic3.py string test.txtと打つと、
re are two types of strings in Python: byte st : 1121 ngs in Python: byte strings and Unicode string : 1145 strings and Unicode strings. As you may have g : 1165 ave guessed, a byte string is a sequence of by : 1206 This creates a byte string: byteString = "hell : 1454 s creates a Unicode string: unicodeString = u" : 1540 ld!" Convert a byte string into a Unicode stri : 1603 ring into a Unicode string and back again: s = : 1625 in: s = "hello byte string" u = unicode( s ) b : 1664 the encoding of the string: s = "hello normal : 2042あと、昨日の方法では表示されない結果も、ちゃんと拾い上げる。Encodeで検索すると、
n exception: UnicodeEncodeError: 'ascii' codec : 3686という結果が表示されて然るべきなのだが、昨日の方法だと出てこない。どうしてなのだろう。
次は、前後に出てくる単語によって並べ替えたりしたい。