0

Python に問題があります。ジェネレーターであることがわかったオブジェクトに格納されている情報を理解しようとしています。Python については何も知りませんが、Java に変換するには、このコードがどのように機能するかを理解する必要があります。コードは次のとおりです。

def segment(text):
    "Return a list of words that is the best segmentation of text."
    if not text: return []
    candidates = ([first]+segment(rem) for first,rem in splits(text))
    return max(candidates, key=Pwords)

def splits(text, L=20):
    "Return a list of all possible (first, rem) pairs, len(first)<=L."
    pairs = [(text[:i+1], text[i+1:]) for i in range(min(len(text), L))]
    return pairs

def Pwords(words): 
    "The Naive Bayes probability of a sequence of words."
    productw = 1
    for w in words:
      productw = productw * Pw(w)
    return productw

メソッド Pwords と splits がどのように機能するかを理解しましたが (関数 Pw(w) は単に行列から値を取得します)、「セグメント」メソッドの「候補」オブジェクトがどのように構築され、何を理解しようとしています。を含む。また、「max()」関数がこのオブジェクトを分析する方法。

ここでこのオブジェクトを印刷するための実行可能な解決策が見つからなかったため、誰かが私を助けてくれることを願っています。みんなに感謝します。マウロ。

4

1 に答える 1

0

ジェネレーターは非常に単純な抽象化です。使い捨てのカスタム イテレータのように見えます。

gen = (f(x) for x in data)

gen は、各次の値が f(x) に等しい反復子であることを意味します。ここで、x はデータの対応する値です。

ネストされたジェネレーターはリスト内包表記に似ていますが、わずかな違いがあります。

  • それは使い捨てです
  • シーケンス全体を作成するわけではありません
  • コードは反復中にのみ実行されます

デバッグを容易にするために、ネストされたジェネレーターをリスト内包表記に置き換えることができます

def segment(text):
    "Return a list of words that is the best segmentation of text."
    if not text: return []
    candidates = [[first]+segment(rem) for first,rem in splits(text)]
    return max(candidates, key=Pwords)
于 2013-05-16T11:03:40.113 に答える