コード例 #1
1
  public double scoreSentence(List<String> sentence) {
    double p = 0;
    int M = this.baseModel.getLmOrder();
    List<String> normalizedSentence = new ArrayList<String>();

    final List<String> sentenceWithBounds =
        new BoundedList<String>(
            sentence,
            baseModel.getWordIndexer().getStartSymbol(),
            baseModel.getWordIndexer().getEndSymbol());
    final int lmOrder = baseModel.getLmOrder() + 1;
    float sentenceScore = 0.0f;
    float previousScore = 0.0f;

    // beginnetje

    for (int i = 1; i < lmOrder - 1 && i <= sentenceWithBounds.size() + 1; ++i) {
      final List<String> ngram = sentenceWithBounds.subList(-1, i);
      final float scoreNgram = (float) getLogProb(ngram, previousScore);
      sentenceScore += scoreNgram;
      previousScore = scoreNgram;
    }

    // rest

    for (int i = lmOrder - 1; i < sentenceWithBounds.size() + 2; ++i) {
      final List<String> ngram = sentenceWithBounds.subList(i - lmOrder, i);
      final float scoreNgram = (float) getLogProb(ngram, previousScore);
      sentenceScore += scoreNgram;
      previousScore = scoreNgram;
    }

    return sentenceScore;
  }