2017-02-14 2 views
3

У меня есть документ в моем поиске elasticsearch со следующим id: AVosj8FEIaetdb3CXpP- Я пытаюсь получить доступ для каждого слова в полях, это tf-idf Я сделал следующее :Elasticsearch: получение tf-idf каждого члена в данном документе

GET /cnn/cnn_article/AVosj8FEIaetdb3CXpP-/_termvectors 
{ 
    "fields" : ["author_wording"], 
    "term_statistics" : true, 
    "field_statistics" : true 
}' 

ответ у меня есть:

{ 
    "_index": "dailystormer", 
    "_type": "dailystormer_article", 
    "_id": "AVosj8FEIaetdb3CXpP-", 
    "_version": 3, 
    "found": true, 
    "took": 1, 
    "term_vectors": { 
    "author_wording": { 
     "field_statistics": { 
     "sum_doc_freq": 3408583, 
     "doc_count": 16111, 
     "sum_ttf": 7851321 
     }, 
     "terms": { 
     "318": { 
      "doc_freq": 4, 
      "ttf": 4, 
      "term_freq": 1, 
      "tokens": [ 
      { 
       "position": 121, 
       "start_offset": 688, 
       "end_offset": 691 
      } 
      ] 
     }, 
     "742": { 
      "doc_freq": 1, 
      "ttf": 1, 
      "term_freq": 1, 
      "tokens": [ 
      { 
       "position": 122, 
       "start_offset": 692, 
       "end_offset": 695 
      } 
      ] 
     }, 
     "9971": { 
      "doc_freq": 1, 
      "ttf": 1, 
      "term_freq": 1, 
      "tokens": [ 
      { 
       "position": 123, 
       "start_offset": 696, 
       "end_offset": 700 
      } 
      ] 
     }, 
     "a": { 
      "doc_freq": 14921, 
      "ttf": 163268, 
      "term_freq": 11, 
      "tokens": [ 
      { 
       "position": 1, 
       "start_offset": 13, 
       "end_offset": 14 
      }, 
      ... 
      "you’re": { 
      "doc_freq": 1112, 
      "ttf": 1647, 
      "term_freq": 1, 
      "tokens": [ 
      { 
       "position": 80, 
       "start_offset": 471, 
       "end_offset": 477 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

это возвращает мне некоторые интересные поля как термин частоты (ТФ), но не тс-IDF. Должен ли я сам это перепроверить? Это хорошая идея? Как я могу это сделать?

+0

Вы не смогли ответить на этот запрос? – Mysterion

+0

@Mysterion Я обновил свой ответ – mel

ответ

3

Да, он возвращает вам tf - срочную частоту (у вас была как частота для этого поля, так и ttf - общая суммарный период, например сумма всех tf по всем полям) и df - частота документа (вы также было ли это в ответ). Вам нужно решить, какой tf-idf вы хотите вычислить только для своего поля или для всех полей. Для вычисления Tf-IDF вам нужно сделать следующее:

tf-idf = tf * idf 

где

idf = log (N/df) 

и N = doc_count от вашего ответа. Elasticsearch не обеспечивает реализацию для вычисления tf-idf, поэтому вам нужно сделать это самостоятельно.

Смежные вопросы