kuroの覚え書き

96の個人的覚え書き

塩基配列(文字列)からコンセンサス配列を抽出するプログラム

要するに文章からよく出てくる単語をピックアップしてカウントし、リストを作れれば良い。
辞書型を使って単語を数えるプログラムはpythonのプログラム例としてよく上がっているが、単語の区切りが明確でない遺伝子配列のような文字列から指定文字数の連続した文字列が指定反復以上出現していたらピックアップしてカウントするというプログラムは落ちていなかったので、作ってみた。多分日本語みたいに単語ごとに明確に区切りを入れずに書く文章から抽出したりするのにも使えると思う。その場合いわゆるキーワード抽出というのとは違い、文字を単純に検索しているだけなので、日本語としておかしな部分が切り取られる可能性も大いにあるが。

text = """ここに検索したい文字列(遺伝子配列など)を入れる。複数の文字列から共通する文字列を検索したいときはスペースで区切って複数並べておく"""
low = 4 #ここで指定した文字数以上の連続したコンセンサスを探す
time = 3 #最低反復数

list = text.split()
counter = {}
for w in list:
    l = len(w)
    l1 = l - low + 1
    for i in range(0,l1):
        for n in range(0,l1-i):
            ws = w[i:i+low+n]
            if ws in counter:
                counter[ws] += 1
            else:
                counter[ws] = 1
for k,v in sorted(counter.items()):
    if v >= time:
        p = text.find(k) #最初に出現する位置
        print(k,v,p)

ウェブインターフェースとか使いやすくする事はできるが、面倒臭いので生スクリプトで済ます。