1

何千もの文を含むファイルがあり、特定の文字/単語を含む文を見つけたいと思っています。

もともと、私は(を使用してsent_tokenize)ファイル全体をトークン化し、次に文を繰り返して単語を見つけていました。ただし、これは遅すぎます。単語の索引をすばやく見つけることができるので、これを有利に使用できますか?単語の周りの領域をトークン化する(つまり、どの文に単語が含まれているかを把握する)方法はありますか?

ありがとう。

編集:私はPythonを使用しており、NLTKライブラリを使用しています。

4

2 に答える 2

2

どのプラットフォームを使用していますか?unix / linux / macOS / cygwinでは、次の操作を実行できます。

sed 's/[\.\?\!]/\n/' < myfile | grep 'myword'

これはあなたの単語を含む行だけを表示します(そしてsedは文に非常に大まかなトークン化を取得します)。特定の言語での解決策が必要な場合は、使用しているものを言う必要があります。

Python用に編集:

以下は機能します---単語に正規表現が一致する場合にのみトークン化を呼び出します(これは非常に高速な操作です)。これは、必要な単語を含む行のみをトークン化することを意味します。

import re
import os.path

myword = 'using'
fname = os.path.abspath('path/to/my/file')

try:
    f = open(fname)

    matching_lines = list(l for l in f if re.search(r'\b'+myword+r'\b', l))
    for match in matching_lines:
        #do something with matching lines
        sents = sent_tokenize(match)
except IOError:
    print "Can't open file "+fname
finally:
    f.close()
于 2012-12-06T10:09:48.550 に答える