我有一列unigrams(單個單詞),bigrams(兩個單詞)和trigrams(三個單詞)我已經從一堆文件中抽出。我的目標是靜態分析報告以及a搜索我可以在這些文件上使用。在RDBMS中存儲uni/bi/trigrams ngram的正確方法是什麼?
John Doe
Xeon 5668x
corporate tax rates
beach
tax plan
Porta San Giovanni
ngrams標有日期和文檔。例如,我可以找到兩個bigrams之間的關係,以及它們的詞組何時首先出現以及文檔之間的關係。我也可以搜索包含這些X數量的un/bi/trigram短語的文檔。
所以我的問題是如何存儲他們來優化這些搜索。
最簡單的方法只是每個短語的簡單字符串列,然後每次在文檔中找到該單詞/短語時,都會將關係添加到document_ngram表中。
table document
{
id
text
date
}
table ngram
{
id
ngram varchar(200);
}
table document_ngram
{
id
ngram_id
document_id
date
}
然而,這意味着,如果我想通過卦爲一個字來搜索我必須使用字符串搜索。例如,可以說我想要所有卦中帶有「夏天」的單詞。
所以,如果我代替了分裂的話,使存儲在NGRAM的唯一的事情就是一個字,然後添加三列,使所有1,2,3 &字鏈可以裝進document_ngram
?
table document_ngram
{
id
word1_id NOT NULL
word2_id DEFAULT NULL
word3_id DEFAULT NULL
document_id
date
}
這是正確的方法嗎?他們是更好的方法嗎?我目前使用PostgreSQL和MySQL,但我相信這是一個通用的SQL問題。
「document_ngram」的最後一個版本包含重複組。你需要一張額外的桌子來避免這種情況。 (第二個版本把重複組放在一個字符串中,這更糟糕) – wildplasser
@wildplasser,你是什麼意思的「重複組」? – Xeoncross
1NF:word1_id,word2_id,word3_id本質上是*數組。 – wildplasser