2

数千語 (1 行に 1 語) のテキスト ファイルがあります。2 つの単語 (文字列) を受け取り、一方の単語が他方のアナグラムであるかどうかをチェックする関数を作成しました (つまり、2 つの単語に同じ文字が含まれていても、順序が異なっていても)。

ここで、巨大なテキスト ファイルを調べて、アナグラムを検索したいと思います。私の出力は、アナグラムであるいくつかの単語のタプルを含むリストになるはずです。

問題は、for/while ループで単語を調べる方法がわからないことです。私が試したことはすべて失敗しました。(私はそれを行う方法を明確にしていますが、Pythonを十分に知りません)。

edit#1: テキスト全体ではなく、テキストの 1 行目から 100 行目を調べたいとしますが、どうすればよいですか?

4

6 に答える 6

2
file = 'file.txt'
with open(file, 'r') as f:
    for line in f:
        pass
于 2011-11-25T13:24:04.250 に答える
0

readlinesは、ファイル内のすべての単語のリストを取得します。

text = open("myfile.txt")
wordlist = text.readlines()

ここで、forループを実行する必要があります。

for item in wordlist:
    anagramfunction()...
于 2011-11-25T13:21:45.127 に答える
0
  1. すべての単語(行)をリストにロードしますが、単語は別々の行にありますが、これは次の方法で実行できます(行の終わりを削除するreadlines()にはを使用する必要があります)。strip()

    words = [s.strip()for s in f.readlines()]

  2. 単語ごとにアナグラムを作成します

  3. そのアナグラムの単語リストin演算子を使用して、アナグラムが存在するかどうかを確認します
  4. 存在する場合は印刷
于 2011-11-25T13:23:40.903 に答える
0

単語のリストはそれほど大きくなく、RAM に収まらないと思います。以下は、アナグラムのリストを作成する (最適化されていない) アルゴリズムです (以前の回答の一部を使用)。

def buildAnagramsList(word, wordList):
    anagramsList = []
    for word2 in wordList:
        if areAnagrams(word, word2): #you already have a similar method
            list.remove(word2) # Spare some time here by not looking twice for the same anagrams
            anagramsList.append(word2)
    return anagramsList

file = open("myfile.txt")
words = [s.strip() for s in file.readlines()]
anagramsLists = [buildAnagramsList(word, words) for word in words]
于 2011-11-25T14:21:37.477 に答える
0

Python チュートリアルでは、次のことをカバーしています。

行を読み取る別の方法は、ファイル オブジェクトをループすることです。これはメモリ効率が高く、高速であり、より単純なコードにつながります。

for line in f:
    print line,

itertools.combinations単語のすべての組み合わせを取得するために使用できます。

with open("file.txt") as word_list:
    for (word1, word2) in itertools.combinations(word_list, 2):
        if anagram(word1, word2):
            # do stuff
于 2011-11-25T13:19:37.783 に答える
0

私は次のようなものを求めていたでしょう:

wordList = []
anagrams = []

file = StringIO.StringIO(open("file.txt","rb"),dialect=csv.excel) //Using csv.excel as each word is on a different line, so hoping this should work but Im not entirely sure
wordList.extend(wordList)

Wordlist は [Word1, Word2, Word3] のようになります。

for i in xrange(wordList):
    if wordList[i] == wordList[i+1]://Code to analyse anagrams here
        anagrams.append(wordList[i])

この構文についてはよくわかりませんが、私が何をするかについてのアイデアを提供します。誰かがおそらくこの回答に反対票を投じるでしょうが、それは私の頭の中から外れているので、OutOfBounds エラーをスローするのを止めなければならないでしょうが、私はそれを書く時間があまりありませんでした! :P

于 2011-11-25T16:56:39.850 に答える