基于 n 元字符的相似性度量

2024-02-29

我使用以下代码从单词中提取了二元语法:

Scanner a = new Scanner(file1);
PrintWriter pw1= new PrintWriter(file2);  
    while (a.hasNext()) {
       String gram=a.next();
       pw1.println(gram);
       int line;
       line = gram.length(); 
       for(int x=0;x<=line-2;x++){
         pw1.println(gram.substring(x, x+2));        
       }
    }
    pw1.close();
}
catch(FileNotFoundException e) {
  System.err.format("FileNotExist");`
}

例如,“student”的二元词是“st”、“tu”、“ud”、“de”、“en”、“nt”。

但我需要找到相似度计算。

我必须计算这些分裂克之间的相似度值。


嗯,你没有很好地解释你的问题,但这是我的尝试。

首先,你的代码到处都是,即使是这么小的程序,任何人都很难阅读任何内容,我会编辑它以使其可读,但我不确定我是否被允许。

无论如何,二元组=字母、单词或音节对(根据谷歌的说法)。您正在寻找它的相似度值吗?

好吧,我对此做了一些研究,看来您需要的算法就是这个。


现在,让我们开始充实这一点。 OP,如果我误解了你的问题,请纠正我。您正在通过将单词分解为二元组并找到它们各自的相似度值来寻找单词之间的相似性,是吗?如果是这样,让我们​​在开始使用这个公式之前对其进行分解,因为它肯定是您需要的。

现在,我们有两个词:法国和法语。如果将它们分解为二元组,我们希望找到它们的相似度值。

对于法国,我们有 {FR, RA, AN, NC, CE}
对于法语,我们有 {FR、RE、EN、NC、CH}

France 和 French 旨在表示第一个方程中的 s1 和 s2。接下来,我们获取他们在两个二元组中的匹配。我的意思是,在这两个单词中都可以找到哪些二元组或字母对?在这种情况下,答案是 FR 和 NC。

由于我们找到了 2 对,因此顶部的值变为 4,因为公式规定,2 乘以匹配的二元组的数量。所以我们在顶部有 4 个,没有其他的。

现在,下半部分是通过将您正在比较的每个单词可以组成的二元组数量相加来解决的,即 5 个代表 FRANCE,5 个代表 FRENCH。所以分母是 10

那么现在,我们有什么?我们有 4/10,即 0.4。THAT是我们的相似度值,这就是你在制作程序时需要找到的值。


让我们尝试另一个例子,将其根植于我们的头脑中,比方说

s1 =“歌利亚”
s2 =“守门员”

因此,使用二元组,我们想出了字符串数组......

{"GO","OL","LI","IA","AT","TH"} {"GO","OA","AL","LI","IE"}

现在,比赛的数量。这两个单词中有多少个匹配的二元组?答案 - 2、GO 和 LI

所以,分子将有

2 x {2 场比赛} = 4

现在,分母是,歌利亚有 6 个二元组,守门员有 5 个二元组。请记住,我们必须根据原始公式将这 2 个值相加,因此我们的分母为 11。

那么,这让我们在哪里?

S(歌利亚, 守门员) = 4/11 ~ .364

我在此链接下找到了公式(以及基本上我刚刚学到的所有内容),这确实使事情变得容易理解。

http://www.catalysoft.com/articles/StrikeAMatch.html http://www.catalysoft.com/articles/StrikeAMatch.html

我将编辑此评论,因为我需要一段时间才能为您的班级提出一个方法,但只是为了快速回复,如果您正在寻找有关如何操作的更多帮助,该链接是一个很好的地方开始。

EDIT****

好的,刚刚为其构建了方法,就在这里。

public class BiGram
{

/*

here are your imports

import java.util.Scanner;
import java.io.File;
import java.io.PrintWriter;
import java.io.FileNotFoundException;

*/
//you'll have to forgive the lack of order or common sense, I threw it 
//together fast I could cuz it sounded like you were in a rush

   public String[][] bigramizedWords = new String[2][100];

   public String[] words = new String[2];

   public File file1 = new File("file1.txt");
   public File file2 = new File("file2.txt");

   public int tracker = 0;
   public double matches = 0;
   public double denominator = 0; //This will hold the sum of the bigrams of the 2 words

   public double results;

   public Scanner a;
   public PrintWriter pw1;


   public BiGram()
   {

      initialize();
      bigramize();

      results = matches/denominator;

      pw1.println("\n\nThe Bigram Similarity value between " + words[0] + " and " + words[1] + " is " + results  + ".");


      pw1.close();


   }

   public static void main(String[] args)
   {

      BiGram b = new BiGram();


   }

   public void initialize()
   {

      try
      {

         a = new Scanner(file1);
         pw1 = new PrintWriter(file2);

         while (a.hasNext()) 
         {

            //System.out.println("Enter 2 words delimited by a space to calculate their similarity values based off of bigrams.");
            //^^^ I was going to use the above line, but I see you are using File and PrintWriter, 
            //I assume you will have the files yourself with the words to be compared

            String gram  = a.next();

            //pw1.println(gram);    -----you had this originally, we don't need this
            int line = gram.length(); 

            for(int x=0;x<=line-2;x++)
            {

               bigramizedWords[tracker][x] = gram.substring(x, x+2);
               pw1.println(gram.substring(x, x+2) + "");

            }

            pw1.println("");

            words[tracker] = gram;

            tracker++;

         }


      }

      catch(FileNotFoundException e) 
      {
         System.err.format("FileNotExist");
      }
   }

   public void bigramize()
   {

      denominator = (words[0].length() - 1) + (words[1].length() - 1); 
      //^^ Let me explain this, basically, for every word you have, let's say BABY and BALL,
      //the denominator is gonna be the sum of number of bigrams. In this case, BABY has {BA,AB,BY} or 3
      //bigrams, same for BALL, {BA,AL,LL} or 3. And the length of the word BABY is 4 letters, same 
      //with Ball. So basically, just subtract their respective lengths by 1 and add them together, and 
      //you get the number of bigrams combined from both words, or 6


      for(int k = 0; k < bigramizedWords[0].length; k++)
      {

         if(bigramizedWords[0][k] != null)
         {


            for(int i = 0; i < bigramizedWords[1].length; i++)
            {

            ///////////////////////////////////////////

               if(bigramizedWords[1][i] != null)
               {

                  if(bigramizedWords[0][k].equals(bigramizedWords[1][i]))
                  {

                     matches++;

                  }

               }

            }

         }

      }

      matches*=2;




      }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于 n 元字符的相似性度量 的相关文章

  • 在Maven中生成Version.java文件

    我有一个使用 Ant 脚本构建的 Java 项目 我正在尝试将项目转换为 Maven 其中一项任务生成一个名为 Version java 的 Java 源文件 其中包含编译时间戳的静态字符串表示形式 如下所示 package com foo
  • 同一服务器上的许多应用程序具有相同的 JMX Mbean 类

    我有超过 5 个 Spring Web 应用程序 它们都在使用另一个通用库 这个公共库有它自己的 MBean 由于强制的唯一 objectName 约束 我的应用程序无法部署在同一服务器上 我使用 MBean 的方式是这样的 Managed
  • 在Windows Server 2003下如何在本地系统帐户下运行jvisualvm.exe?

    我在带有 Java 1 6 u 20 的 Windows Server 2003 下将 GlassFish 3 0 1 作为 Windows 服务运行 总体上我很满意 我希望能够在这个 JVM 上使用 VisualVM 并使用无法在 Tom
  • 在不支持 CAS 操作的处理器上进行 CompareAndSet

    今天 我在一次采访中被问到下一个问题 如果您在具有不支持 CAS 操作的处理器的机器上调用 AtomicLong 的compareAndSet 方法 会发生什么情况 您能否帮我解决这个问题 并在可能的情况下提供一些全面描述的链接 From
  • Java 中的 <-- 是什么? [复制]

    这个问题在这里已经有答案了 我遇到了下面的片段 它输出到4 3 2 1 我从来没有遇到过 lt 在爪哇 Is lt 使 var1 的值变为 var2 的运算符 public class Test public static void mai
  • 将类转换为 JSONObject

    我有好几堂这样的课 我想将类转换为 JSONObject 格式 import java io Serializable import com google gson annotations SerializedName public cla
  • Java AES 256 加密

    我有下面的 java 代码来加密使用 64 个字符密钥的字符串 我的问题是这会是 AES 256 加密吗 String keyString C0BAE23DF8B51807B3E17D21925FADF273A70181E1D81B8EDE
  • Mockito 和 Hamcrest:如何验证 Collection 参数的调用?

    我遇到了 Mockito 和 Hamcrest 的泛型问题 请假设以下界面 public interface Service void perform Collection
  • 为什么在将 String 与 null 进行比较时会出现 NullPointerException?

    我的代码在以下行中出现空指针异常 if stringVariable equals null 在此语句之前 我声明了 stringVariable 并将其设置为数据库字段 在这个声明中 我试图检测该字段是否有null值 但不幸的是它坏了 有
  • 为什么解析这个 JSON 会抛出错误?

    我正在尝试解析这个 JSONObject query yahoo count 1 results rate Name USD INR id USDINR Time 12 19pm Date 10 31 2015 Bid 65 405 Ask
  • 如何使用双重调度来分析图形基元的交集?

    我正在分析图形基元 矩形 直线 圆形等 的交互并计算重叠 相对方向 合并等 这被引用为双重调度的一个主要示例 例如维基百科 http en wikipedia org wiki Double dispatch 自适应碰撞算法通常要求 不同的
  • 在java程序中使用c++ Dll

    我正在尝试使用System LoadLibrary 使用我用 C 编写的一个简单的 dll UseDllInJava java import com sun jna Library import com sun jna Native imp
  • Tomcat 6 未从 WEB-INF/lib 加载 jar

    我正在尝试找出我的 tomcat 环境中的配置问题 我们的生产服务器正在运行 tomcat 安装并从共享 NFS 挂载读取战争 然而 当我尝试使用独立的盒子 及其配置 进行同样的战争时 我收到下面发布的错误 有趣的是 如果我将 WEB IN
  • 文本视图不显示全文

    我正在使用 TableLayout 和 TableRow 创建一个简单的布局 其中包含两个 TextView 这是代码的一部分
  • 用于请求带有临时缓存的远程 Observable 的 RxJava 模式

    用例是这样的 我想暂时缓存最新发出的昂贵的Observable响应 但在它过期后 返回到昂贵的源Observable并再次缓存它 等等 一个非常基本的网络缓存场景 但我真的很难让它工作 private Observable
  • 使用 Apache 允许 Glassfish 和 PHP 在同一服务器中协同工作

    是否可以建立从 Java 到 php 文件的桥梁 我有一个用 Java 编写的应用程序 我需要执行http piwik org http piwik org 这是用 PHP 编写的 在服务器中 我正在运行 PHP 但无法从浏览器访问 php
  • Java 中清除嵌套 Map 的好方法

    public class MyCache AbstractMap
  • 使用 DBCP 配置 Tomcat

    在闲置一段时间 几个小时 后 我们收到了 CommunicationsException 来自 DBCP 错误消息 在异常中 位于这个问题的末尾 但我没有看到任何配置文件中定义的 wait timeout 我们应该看哪里 在 tomcat
  • 在会话即将到期之前调用方法

    我的网络应用程序有登录的用户 有一个超时 在会话过期之前 我想执行一个方法来清理一些锁 我已经实现了sessionListener但一旦我到达public void sessionDestroyed HttpSessionEvent eve
  • 关闭扫描仪是否会影响性能

    我正在解决一个竞争问题 在问题中 我正在使用扫描仪获取用户输入 这是 2 个代码段 一个关闭扫描器 一个不关闭扫描器 关闭扫描仪 import java util Scanner public class JImSelection publ

随机推荐

  • 使用 Jackson 根据 API 版本指定不同的 JSON 属性名称

    我需要能够使用 Jackson 序列化 反序列化对象同时支持多个 API 版本 我探索过以下解决方案 JsonProperty 属性命名策略 混合注解 然而 每一个都会导致自己的问题 如果我可以直接在注释中添加具有正确名称的多个版本 Jso
  • 编译/链接过程如何进行?

    编译和链接过程如何进行 Note This is meant to be an entry to Stack Overflow s C FAQ https stackoverflow com questions tagged c faq I
  • JCombobox箭头消失

    当在未放置在构造函数中的方法中填充组合框时 组合框的箭头消失 我尝试使用invokeLater方法 但它不起作用 private void fillProduct this VALID FOR PRODUCT removeAllItems
  • 内联块元素似乎毫无理由地断行?

    我有一些非常基本的 HTML CSS 但没有按我的预期工作 基本上我的身体设置为 400 像素宽 然后 我在 body 内有两个 div 其显式宽度分别为 300px 和 100px 此外 这两个 div 都设置为display inlin
  • 如何用SDL 2.0画正方形?

    我想做一些简单的事情 比如使用 C 和 SDL 在屏幕上画一个正方形 我复制的例子不起作用 Get window surface SDL Surface screenSurface SDL GetWindowSurface window F
  • 使用 Scikit learn 时出现 ValueError。模型的特征数量与输入的特征数量不匹配

    我正在使用 RandomForestClassifier 解决分类问题 在代码中 我将数据集拆分为训练数据和测试数据以进行预测 这是代码 from sklearn ensemble import RandomForestClassifier
  • 我们如何在sql server中选择前20%和后80%的记录

    我正在尝试选择表中前 20 的排序结果以及剩余的 后 80 结果 当我做 select top 20 percent from table 1 然后 select top 80 percent from table 1 order by d
  • R 中的 Grep 查找具有自定义“扩展”边界的单词

    我正在寻找一个正则表达式来 grep 整个单词 包括用数字或下划线分隔的单词 b将数字和下划线视为单词的一部分 而不是边界 例如 我想在 DOG MOUSE CAT DOG MOUSE CAT 中以及 DOG MOUSE9CAT 中以及表达
  • 添加 CHECK 以对多个表施加约束

    我想修改以下 DDL 以添加 CHECK 约束 以便商店的经理在同一家商店工作 并且商店提供所有产品 如果其类型为 本地 有人可以帮忙吗 CREATE TABLE employee employee number CHAR 5 NOT NU
  • 禁用表单提交按钮

    我有一个按钮 我想在提交表单时禁用该按钮 以防止用户多次提交 我曾尝试天真地使用 javascript onclick 禁用该按钮 但如果客户端验证失败 该按钮仍保持禁用状态 如何在表单成功提交时而不只是在用户单击时禁用该按钮 这是一个 A
  • 哪种方式更好地创建 vue 组件(导出默认值、defineComponent 和新 Vue)

    最近学习 Vue js 后 我对如何编写 vue 组件语法感到非常困惑 我一直在看 YouTube 教程和文章 每个人都使用不同的方法 就 vue 3 而言 我们应该使用 导出默认值以创建组件 或导出默认的defineComponent 或
  • 远程连接到 SQL Server Express 实例

    尝试连接到远程 SQL Express 实例时 我收到以下错误 A network related or instance specific error occurred while establishing a connection to
  • 如何让网页自动改变宽度?

    在HTML中 有没有办法让网页扩展到用户的显示器 比如我有一个15英寸的 但别人有一个24英寸的 该网页在他们的屏幕上很小 但适合最小尺寸 如何使页面扩展至 100 或者 95 流体宽度是通过使用百分比单位或 em 单位来实现的 这一切都是
  • iOS 语音到数字格式的文本转换

    目前我正在使用默认的 iOS 语音到文本转换 而无需为其添加任何代码 当用户说 五 时 它会显示为 五 或 5 但是 我需要将它始终转换为 5 我可以使用 SFSpeechRecognizer 或任何其他方式来实现此目的吗 这可以帮助您入门
  • 将 const std::string & 作为参数传递的日子结束了吗?

    我最近听到赫伯 萨特 Herb Sutter 的一次演讲 他提出通过的理由std vector and std string by const 大部分已经消失了 他建议现在最好编写如下所示的函数 std string do somethin
  • Excel自动计算设置

    我在 Microsoft Office Excel 2007 中有一个复杂的项目 它使用了大量的 UDF 通过 VBA 在工作簿 打开事件 我将 Excel 自动计算设置为关闭 并策略性地放置计算每当我需要时手动计算单元格的方法 以便 UD
  • ggplot to png - 自动拉伸图像

    我正在生成一个ggplot plot并将其另存为 png图像 虽然 Rstudio 中生成的绘图根据 y 轴的值进行拉伸 但当我将其另存为时 我会得到一个正方形的图像 png 如何自动获得最佳拉伸图像 png form Function t
  • 微调器的“大”滚动条

    我有一个包含大量项目的旋转器 因此简单的滚动对于用户来说非常慢 我想在 ScrollView 中使用 大 可触摸滚动条或类似的滚动条 我该怎么做 我有一个装有大量物品的旋转器 这是你问题的一部分 将 Spinner 视为类似于桌面或 Web
  • 在 C# 中接受转义序列的 Label 属性 [重复]

    这个问题在这里已经有答案了 可能的重复 C 中标签是否有显示 的属性 我正在尝试在标签中显示客户姓名 当名称中存在任何 符号时 它会显示为 例如 A B XXX显示为AB with B下划线 除了硬编码之外 有什么办法可以显示 通过设置任何
  • 基于 n 元字符的相似性度量

    我使用以下代码从单词中提取了二元语法 Scanner a new Scanner file1 PrintWriter pw1 new PrintWriter file2 while a hasNext String gram a next