首页 > 其他分享 >基于词频的文件相似度 (30分)

基于词频的文件相似度 (30分)

时间:2023-05-30 16:34:59浏览次数:39  
标签:10 基于 文件 int 30 cin 词频 str include


实现一种简单原始的文件相似度计算,即以两文件的公共词汇占总词汇的比例来定义相似度。为简化问题,这里不考虑中文(因为分词太难了),只考虑长度不小于3、且不超过10的英文单词,长度超过10的只考虑前10个字母。
输入格式:

输入首先给出正整数N(≤100),为文件总数。随后按以下格式给出每个文件的内容:首先给出文件正文,最后在一行中只给出一个字符#,表示文件结束。在N个文件内容结束之后,给出查询总数M(≤104),随后M行,每行给出一对文件编号,其间以空格分隔。这里假设文件按给出的顺序从1到N编号。
输出格式:

针对每一条查询,在一行中输出两文件的相似度,即两文件的公共词汇量占两文件总词汇量的百分比,精确到小数点后1位。注意这里的一个“单词”只包括仅由英文字母组成的、长度不小于3、且不超过10的英文单词,长度超过10的只考虑前10个字母。单词间以任何非英文字母隔开。另外,大小写不同的同一单词被认为是相同的单词,例如“You”和“you”是同一个单词。
输入样例:

3
Aaa Bbb Ccc
#
Bbb Ccc Ddd
#
Aaa2 ccc Eee
is at Ddd@Fff
#
2
1 2
1 3

输出样例:

50.0%
33.3%

这道题还是相对来说在今天做的题里蛮简单的,只要留意ddd@aaa这种情况是两个词,可以用stringstream处理这种情况,其他的地方都跟天体二阶题<集合相似度>差不多

//
// Created by TIGA_HUANG on 2020/10/6.
//

#include <iostream>
#include <vector>
#include <set>
#include <iomanip>
#include <sstream>

using namespace std;

int N;
set<string> v[105];

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cin >> N;
    string str;
    for (int i = 0; i < N; ++i) {
        do {
            cin >> str;
            if (str == "#")
                continue;
            for (int j = 0; str[j]; ++j) {
                if (isupper(str[j]))
                    str[j] = str[j] - 'A' + 'a';
                if (!(isupper(str[j]) || islower(str[j]))) {
                    str[j] = ' ';
                }
            }
            stringstream ss;
            ss << str;
            while(ss >> str) {
                if (str.length() > 10) {
                    str = str.erase(10);
                    v[i + 1].insert(str);
                } else if (str.length() > 2) {
                    v[i + 1].insert(str);
                }
            }

        } while (str != "#");
    }
    int K;
    cin >> K;
    set<string> sc;
    for (int i = 0; i < K; ++i) {
        int a, b, same = 0;
        cin >> a >> b;
        for (const auto & item : v[a]) {
            if (v[b].count(item)) {
                same++;
            }
        }
        cout << fixed << setprecision(1) << same * 100.0 / (v[a].size() + v[b].size() - same) << "%\n";
        sc.clear();
    }
    return 0;
}


标签:10,基于,文件,int,30,cin,词频,str,include
From: https://blog.51cto.com/u_16144724/6380362

相关文章

  • ChatDoctor:一个基于微调LLaMA模型用于医学领域的医学聊天机器人
    ChatDoctor:一个基于微调LLaMA模型用于医学领域的医学聊天机器人https://www.yunxiangli.top/ChatDoctor/资源列表Demo.自动聊天医生与疾病数据库演示。HealthCareMagic-100k.100k患者和医生之间的真实的对话HealthCareMagic.com。icliniq-10k.患者和医生之间的真实的对话来自......
  • 2023-05-30 taro如何切换到其他已发布的小程序
    taro可以把一套小程序代码发布成多个小程序,那么要如何维护这些小程序呢,咱也不懂,咱也是刚开始学习怎么操作。开始前先感谢chatGpt这个工具,它真的很棒,几乎没有什么是它不会的,我的很多一些问题都是问chatGpt,就比如这篇文章都是chatGpt给我的。要将Taro项目切换到已经发布的小程序,需......
  • 2023-05-30 前端通过node获取七牛云的token(token最好还是在后端返回,前端获取token会暴
    constfs=require('fs');constqiniu=require('qiniu');varaccessKey='你的accessKey';varsecretKey='你的secretKey';varmac=newqiniu.auth.digest.Mac(accessKey,secretKey);//获取七牛tokenvaroptions={......
  • 2023-05-30 浅试nodejs实现登录接口业务(未完,待测试)
    constexpress=require('express');constbodyParser=require('body-parser');constmysql=require('mysql');//创建MySQL连接池constpool=mysql.createPool({host:'localhost',user:'root',password......
  • 基于ZigBee3.0技术的数传电台功能使用详解
    一、ZigBee3.0数传电台功能简介1、4G DTU数传电台LINK灯详解基于zigbee3.0通信技术的4G DTU数传电台LINK灯用于指示模块当前网络状态,设备入网成功后LINK灯常亮,当设备没有网络时LINK灯熄灭;在协调器模式下,该引脚指示zigbee模块是否正常建立网络,协调器和路由器在配网模式下1Hz闪......
  • 基于SQL的数据可视化和数据挖掘
           基于SQL的数据可视化和数据挖掘IT奋斗的青年2023-04-1221:34发表于山东我们的项目是一个在线教育平台,平台上有数百门课程,数千名学生在线学习。我们的目标是从数据中挖掘出有价值的信息,帮助平台做出更加科学和有效的运营决策。数据分析流程1.数据......
  • [ABC302F]MergeSet
    AGC010BBoxes这道题其实是一道01BFS求最短路的模型,但是建模比较难想。首先需要想到对于每个集合内的点两两连边,边权为\(1\),由于开始和结束时需要从起点到中转点和中转点到终点,而我们要求的其实是中转点的数量,如果我们直接求一遍最短路(这样的话用的是普通bfs),中准点之间是an......
  • 百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 基于 Paddle Serving快速使用(服
    百度飞桨(PaddlePaddle)-PP-OCRv3文字检测识别系统预测部署简介与总览百度飞桨(PaddlePaddle)-PP-OCRv3文字检测识别系统PaddleInference模型推理(离线部署)百度飞桨(PaddlePaddle)-PP-OCRv3文字检测识别系统基于PaddleServing快速使用(服务化部署)PaddleServing......
  • 电影绿幕走进生活?如何基于相芯SDK实现绿幕分割?
    绿幕,是一种广泛应用于电影、电视制作和视频编辑领域的技术。它通过在拍摄或录制过程中使用一块特殊颜色(通常是绿色)的背景布,然后在后期制作中将该颜色替换成其他图像或视频素材。这种技术主要基于颜色键盘合成技术(chromakeying),可以实现在虚拟环境中展示各种场景和效果。相芯SDK绿幕......
  • 代码随想录算法训练营第二十一天|530. 二叉搜索树的最小绝对差、
    【参考链接】530.二叉搜索树的最小绝对差【注意】1.二叉搜索树采用中序遍历,其实就是一个有序数组。2.使用双指针,更快。【代码】1#Definitionforabinarytreenode.2#classTreeNode(object):3#def__init__(self,val=0,left=None,right=None):4#......