實現一種簡單原始的檔案相似度計算,即以兩檔案的公共詞彙佔總詞彙的比例來定義相似度。為簡化問題,這裡不考慮中文(因為分詞太難了),只考慮長度不小於3、且不超過10的英文單詞,長度超過10的只考慮前10個字母。
輸入格式:
輸入首先給出正整數n(≤100),為檔案總數。隨後按以下格式給出每個檔案的內容:首先給出檔案正文,最後在一行中只給出乙個字元#,表示檔案結束。在n個檔案內容結束之後,給出查詢總數m(≤10
4 ),隨後m行,每行給出一對檔案編號,其間以空格分隔。這裡假設檔案按給出的順序從1到n編號。
輸出格式:
針對每一條查詢,在一行中輸出兩檔案的相似度,即兩檔案的公共詞彙量佔兩檔案總詞彙量的百分比,精確到小數點後1位。注意這裡的乙個「單詞」只包括僅由英文本母組成的、長度不小於3、且不超過10的英文單詞,長度超過10的只考慮前10個字母。單詞間以任何非英文本母隔開。另外,大小寫不同的同一單詞被認為是相同的單詞,例如「you」和「you」是同乙個單詞。
輸入樣例:
3aaa bbb ccc
bbb ccc ddd
aaa2 ccc eee
is at ddd@fff
21 2
1 3輸出樣例:
50.0%
33.3%
根據要求處理詞語:單詞長度在[3,10],超過10的部分只取10,非英文本母都視作分隔符;
處理詞語的時候用乙個set的陣列來存放每個檔案的詞語;
輸入了要對比的檔案編號之後,將兩個檔案編號對應的詞彙進行對比,記錄重複的詞彙數;
結果就是 ans = 重複的詞彙數 / (兩個檔案詞彙數之和-重複的詞彙數)
#include
#include
#include
#include
using
namespace std;
unordered_set file_word[
110]
;int n,k;
void
deal
(string s,
int file_no)
else}}
intmain()
while
(s!=
"#");}
cin >> k;
for(
int i=
0;iprintf
("%.1lf%%\n"
,total==0?
0:common_cnt*
100.0
/total);}
return0;
}
7 44 基於詞頻的檔案相似度(30 分)
本題目要求實現乙個簡化的熱門話題推薦功能,從大量英文 因為中文分詞處理比較麻煩 微博中解析出話題,找出被最多條微博提到的話題。輸入格式 輸入說明 輸入首先給出乙個正整數n 105 隨後n行,每行給出一條英文微博,其長度不超過140個字元。任何包含在一對最近的 中的內容均被認為是乙個話題,輸入保證 成...
7 44 基於詞頻的檔案相似度 30 分
先檢查輸入的單詞是否分割正確,再進行統計。注意點 單詞大小寫不敏感 單詞長度大於2且小於等於10,以非字母分割。兩個檔案的單詞總量如果有相同的單詞,只統計一次。include include include include include include using namespace std co...
7 44 基於詞頻的檔案相似度 30分
實現一種簡單原始的檔案相似度計算,即以兩檔案的公共詞彙佔總詞彙的比例來定義相似度。為簡化問題,這裡不考慮中文 因為分詞太難了 只考慮長度不小於3 且不超過10的英文單詞,長度超過10的只考慮前10個字母。輸入格式 輸入首先給出正整數n 100 為檔案總數。隨後按以下格式給出每個檔案的內容 首先給出檔...