1. 程式人生 > >5-11 基於詞頻的檔案相似度(30分)

5-11 基於詞頻的檔案相似度(30分)

5-11 基於詞頻的檔案相似度 (30分)

實現一種簡單原始的檔案相似度計算,即以兩檔案的公共詞彙佔總詞彙的比例來定義相似度。為簡化問題,這裡不考慮中文(因為分詞太難了),只考慮長度不小於3、且不超過10的英文單詞,長度超過10的只考慮前10個字母。

輸入格式:

輸入首先給出正整數NN(\le 100≤100),為檔案總數。隨後按以下格式給出每個檔案的內容:首先給出檔案正文,最後在一行中只給出一個字元#,表示檔案結束。在NN個檔案內容結束之後,給出查詢總數MM(\le 10^4≤10
​4
​​ ),隨後MM行,每行給出一對檔案編號,其間以空格分隔。這裡假設檔案按給出的順序從1到NN編號。

輸出格式:

針對每一條查詢,在一行中輸出兩檔案的相似度,即兩檔案的公共詞彙量佔兩檔案總詞彙量的百分比,精確到小數點後1位。注意這裡的一個“單詞”只包括僅由英文字母組成的、長度不小於3、且不超過10的英文單詞,長度超過10的只考慮前10個字母。單詞間以任何非英文字母隔開。另外,大小寫不同的同一單詞被認為是相同的單詞,例如“You”和“you”是同一個單詞。

輸入樣例:

3
Aaa Bbb Ccc
#
Bbb Ccc Ddd
#
Aaa2 ccc Eee
is at [email protected]
#
2
1 2
1 3
輸出樣例:

50.0%
33.3%

#include<iostream>
#include<algorithm> #include<set> #include<cstdio> #include<string> using namespace std; char aa[105]; string a; set<string> aaa[105]; bool panduan(string a1) { for(int i=0;i<a1.length();i++) if(!isalpha(a1[i])) return false; return true; } int
ToUpper(int c) { return tolower(c); } int main() { int n,i=0,j=0; cin>>n; for(i=0;i<n;i++) { while(cin>>aa&&aa[0]!='#') { for(j=0;aa[j];j++) { if(isalpha(aa[j])) a+=aa[j]; else { int len=a.length(); if(len>=3) { if(len>10) a[10]=0; transform(a.begin(),a.end(),a.begin(),ToUpper); if(panduan(a)) aaa[i].insert(a); } a=""; } } if(isalpha(aa[j-1])) { int len=a.length(); if(len>=3) { if(len>10) a[10]=0; transform(a.begin(),a.end(),a.begin(),ToUpper); if(panduan(a)) aaa[i].insert(a); } } } } int m; cin>>m; int a1,b1,x,y; for(i=0;i<m;i++) { cin>>a1>>b1; a1--;b1--; x=0;y=0; for(set<string>::iterator it=aaa[a1].begin();it!=aaa[a1].end();it++) { if(aaa[b1].count(*it)==1) x++; } y=aaa[a1].size()+aaa[b1].size(); printf("%.1lf%%\n",(double)x/y); } }

相關推薦

5-11 基於詞頻檔案相似30

5-11 基於詞頻的檔案相似度 (30分) 實現一種簡單原始的檔案相似度計算,即以兩檔案的公共詞彙佔總詞彙的比例來定義相似度。為簡化問題,這裡不考慮中文(因為分詞太難了),只考慮長度不小於3、且不超過10的英文單詞,長度超過10的只考慮前10個字母。 輸

7-6 集合相似25

給定兩個整數集合,它們的相似度定義為:N​c​​/N​t​​×100%。其中N​c​​是兩個集合都有的不相等整數的個數,N​t​​是兩個集合一共有的不相等整數的個數。你的任務就是計算任意一對給定集合的相

計算圖片的相似深度學習

轉載:https://blog.csdn.net/hjimce/article/details/50098483 一、相關理論      本篇博文主要講解2015年CVPR的一篇關於影象相似度計算的文章:《Learning to Compar

【LOJ#6041】事情的相似字尾自動機

【LOJ#6041】事情的相似度(字尾自動機) 題面 LOJ 題解 \(\mbox{YCB}\)搬了這道題目。。。\(\mbox{QwQ}\) 還是用到\(lcp\)就是\(parent\)樹上的\(LCA\)的\(len\)。 每次詢問顯然就是區間內點的貢獻。 那麼考慮所有可能出現的點對。 顯然對於

SQL Server對比兩字串的相似函式演算法

ALTER FUNCTION FNStrCompare (@Val1 VARCHAR(50),---比較字串1 @Val2 VARCHAR(50),---比較字串2 @Break VARCHAR(10) ---分隔符 ) RETURNS INT AS BEGIN DECLARE @

openshift/origin學習記錄1——基於二進位制檔案的安裝單機版

先決條件 開啟SELINUX 官方文件推薦開啟SELINUX,否則會導致安裝失敗。 修改/etc/selinux/config SELINUX=enforcing SELINUXTYPE=targeted 安裝docker # y

相似距離計算彙總

一、說明相似性度量用以描述兩個向量之間的相似性,是一個值域為一維的二元函式。一般情況,相似性度量本質上指距離度量,只不過數值指示剛好相反,如果是距離的話,數值越小,距離越近,而相似度越大;如果是相似度的話,數值越小,相似度越小,而距離越大。相似性度量在機器學習中是一個非常基礎的概念,尤其在聚類、推薦系統等演算

Loadrunner 9.5/11 java vuser環境配置問題已解決

Loadrunner 9.5/11 使用java 開發vsuer script需要的環境配置  本文從兩個方面來講:windows 32位作業系統;windows 64 作業系統開始之前,先說下jav

矩陣式比較兩文字字串相似包含漢字方法兩則java程式碼

package com.gsww.ctyxy.util; import java.text.NumberFormat;   import java.util.Locale;    /**  * 比較兩個字串的相似度  */   public class AutomaticRating {   /*    pu

L2-005 集合相似 25 ) STL——set

-h line pin scripts 正整數 判斷 gin can 們的 鏈接:https://pintia.cn/problem-sets/994805046380707840/problems/994805070149828608 題目: 給

7-11 關鍵活動30

-h 兩個 tdi 最短 程序 lis 此外 開始 clu 7-11 關鍵活動(30 分) 假定一個工程項目由一組子任務構成,子任務之間有的可以並行執行,有的必須在完成了其它一些子任務後才能執行。“任務調度”包括一組子任務、以及每個子任務可以執行所依賴的子任務集。 比

07-圖5 Saving James Bond - Hard Version30

bond style n) capture end maximum imp ant bar This time let us consider the situation in the movie "Live and Let Die" in which James Bo

7-5 跳一跳30

做了 cout ria AR -o stream .... urn 現在 有一條長度為n的賽道,其中有m個陷阱,這些陷阱都位於整數位置,分別是a1,a2,....am,陷入其中則必死無疑。 開始時小人站在位置1,小人一次只能向前跳一步或兩步。顯然,如果有兩個挨著的陷阱,小人

7-2 列車調 25

alt 問題 opened ons max esp spa lose code 題目: 樣例輸入: 98 4 2 5 3 9 1 6 7 樣例輸出: 4 思路: 要想得到最少的調度序列,那就要找出最少的下降序列的個數。拿上邊的例子來說:有如下四個下降序列 8 4 2

7-3 詞頻統計30 巧解

2018年8月15日 于山東 7-3 詞頻統計(30 分) 請編寫程式,對一段英文文字,統計其中所有不同單詞的個數,以及詞頻最大的前10%的單詞。 所謂“單詞”,是指由不超過80個單詞字元組成的連續字串,但長度超過15的單詞將只擷取保留前15個單詞字元。而合法的“

PAT 習題bitset 06-圖3 六空間 30

包括 沒有 stream con 長度 text 翻轉 大量 集合 1 #include<iostream> 2 #include<string> 3 #include<bitset> 4 5 6 using names

11-雜湊4 Hashing - Hard Version 30

Given a hash table of size N, we can define a hash function (. Suppose that the linear probing is used to solve collisions, we can easily obtain

7-11 社交網路圖中結點的“重要性”計算 30 Dijkstra演算法

題意:  思路:對每個輸入的點跑一遍dijkstra演算法,然後對這個點到所有點的距離求和按公式輸出就可以了。 (這次嘗試了用陣列模擬連結串列來做最短路問題,重新整理了自己對最短路的理解) 這裡構造連結串列的過程我的理解一直有誤差,第一行的式子中參與程式碼構建的

7-7 六空間 30

“六度空間”理論又稱作“六度分隔(Six Degrees of Separation)”理論。這個理論可以通俗地闡述為:“你和任何一個陌生人之間所間隔的人不會超過六個,也就是說,最多通過五個人你就能夠認識任何一個陌生人。”如圖1所示。 圖1 六度空間示意圖 “

7-7 六空間 30 (bfs)c++簡短高效解決

“六度空間”理論又稱作“六度分隔(Six Degrees of Separation)”理論。這個理論可以通俗地闡述為:“你和任何一個陌生人之間所間隔的人不會超過六個,也就是說,最多通過五個人你就能夠認識任何一個陌生人。”如圖1所示。 圖1 六度空間示意圖 “六度空間”理論雖然得到廣泛的認