2

http://www.nltk.org/book-にあるpythonの正規表現とNLTKでさまざまなテキストを処理しようとしています。ランダムテキストジェネレーターを作成しようとしていますが、問題が発生しています。まず、私のアルゴリズムは次のとおりです。

  1. 入力として文を入力します-これはトリガー文字列と呼ばれます-

  2. トリガー文字列で最長の単語を取得する

  3. すべてのProjectGutenbergデータベースで、この単語を含む文を検索します-大文字と小文字に関係なく-

  4. 手順3で話した単語を含む最長の文を返します

  5. ステップ1とステップ4の文を一緒に追加します

  6. プロセスを繰り返します。私は2番目の文で最も長い単語を取得し、そのように続ける必要があることに注意してください-

これまでのところ、最初の2文でこれを実行できましたが、大文字と小文字を区別しない検索を実行できません。Project Gutenbergの全文データベースはgutenberg.sents()関数を介して利用できますが、正規表現-大文字と小文字を区別しない検索はgutenberg.sents()、本の文を次のように出力するため、実質的に不可能です-リスト形式のリスト-:

例:シェイクスピアのマクベスのすべての文は、次のように入力して呼び出されます

import nltk

from nltk.corpus import gutenberg 

gutenberg.sents('shakespeare-macbeth.txt') 

Pythonシェルコマンドラインに入力すると、出力は次のようになります。

[['[', 'The', 'Tragedie', 'of', 'Macbeth', 'by', 'William', 'Shakespeare', '1603', ']'], 
['Actus', 'Primus', '.'], .......] 

[ウィリアムシェイクスピアによるマクベスの悲劇、1603年]とアクタスプリムスと。最初の2つの文です。

大文字/小文字に関係なく、探している単語を見つけるにはどうすればよいですか?過去2日間、これをいじくり回していて、神経質になり始めているので、私は必死に助けを必要としています。どうもありがとう。

4

2 に答える 2

3

単語のリストLとターゲット単語が与えられるとt

any(t.lower()==w.lower() for w in L)

L に単語 t があるかどうかを、大文字と小文字を区別しない方法で示します。もちろん、実行する方が速いです

lt = t.lower()
any(lt==w.lower() for w in L)

Python は定数の計算をループから「巻き上げ」ないため、自分で巻き上げない限り、繰り返し実行されます。

リストのリストが与えられた場合、lol含む最長のサブリストは次のtように見つけることができます

longest = max((L for L in lol if any(lt==w.lower() for w in L)), key=len)

複数のサブリストが含まれtていて、最大長が同じである場合、最初のサブリストが表示されます。

于 2010-08-23T17:15:17.850 に答える
0

組み込み関数str.lower()の使用はどうですか? ¶ 小文字に変換された文字列のコピーを返します。

次に、文字列を比較します。

于 2010-08-23T17:28:20.273 に答える