根据声音相似度确定弦之间的距离

2023-12-13

两个单词之间相似性的定量描述是基于它们的发音/发音,类似于编辑距离吗?

我知道 soundex 给了相同的 id发音相似词,但据我理解,它不是词之间差异的定量描述。

from jellyfish import soundex

print(soundex("two"))
print(soundex("to"))

您可以结合语音编码和字符串比较算法。事实上jellyfish两者都供应。

设置库示例

from jellyfish import soundex, metaphone, nysiis, match_rating_codex,\
    levenshtein_distance, damerau_levenshtein_distance, hamming_distance,\
    jaro_similarity
from itertools import groupby
import pandas as pd
import numpy as np


dataList = ['two','too','to','fourth','forth','dessert',
            'desert','Byrne','Boern','Smith','Smyth','Catherine','Kathryn']

sounds_encoding_methods = [soundex, metaphone, nysiis, match_rating_codex]

让我们比较一下不同的语音编码

report = pd.DataFrame([dataList]).T
report.columns = ['word']
for i in sounds_encoding_methods:
    print(i.__name__)
    report[i.__name__]= report['word'].apply(lambda x: i(x))
print(report)
          soundex metaphone   nysiis match_rating_codex
word                                                   
two          T000        TW       TW                 TW
too          T000         T        T                  T
to           T000         T        T                  T
fourth       F630       FR0     FART               FRTH
forth        F630       FR0     FART               FRTH
dessert      D263      TSRT    DASAD               DSRT
desert       D263      TSRT    DASAD               DSRT
Byrne        B650       BRN     BYRN               BYRN
Boern        B650       BRN     BARN                BRN
Smith        S530       SM0     SNAT               SMTH
Smyth        S530       SM0     SNYT              SMYTH
Catherine    C365      K0RN  CATARAN              CTHRN
Kathryn      K365      K0RN   CATRYN             KTHRYN

您可以看到,语音编码在使单词具有可比性方面做得非常好。您可能会看到不同的案例,并根据您的情况选择其中一种或另一种。

现在我将采用上述内容并尝试使用 levenshtein_distance 找到最接近的匹配,但我也可以为您提供其他任何匹配。

"""Select the closer by algorithm
for instance levenshtein_distance"""
report2 = pd.DataFrame([dataList]).T
report2.columns = ['word']

report.set_index('word',inplace=True)
report2 = report.copy()
for sounds_encoding in sounds_encoding_methods:
    report2[sounds_encoding.__name__] = np.nan
    matched_words = []
    for word in dataList:
        closest_list = []
        for word_2 in dataList:
            if word != word_2:
                closest = {}
                closest['word'] =  word_2
                closest['similarity'] = levenshtein_distance(report.loc[word,sounds_encoding.__name__],
                                     report.loc[word_2,sounds_encoding.__name__])
                closest_list.append(closest)

        report2.loc[word,sounds_encoding.__name__] = pd.DataFrame(closest_list).\
            sort_values(by = 'similarity').head(1)['word'].values[0]

print(report2)
             soundex  metaphone     nysiis match_rating_codex
word                                                         
two              too        too        too                too
too              two         to         to                 to
to               two        too        too                too
fourth         forth      forth      forth              forth
forth         fourth     fourth     fourth             fourth
dessert       desert     desert     desert             desert
desert       dessert    dessert    dessert            dessert
Byrne          Boern      Boern      Boern              Boern
Boern          Byrne      Byrne      Byrne              Byrne
Smith          Smyth      Smyth      Smyth              Smyth
Smyth          Smith      Smith      Smith              Smith
Catherine    Kathryn    Kathryn    Kathryn            Kathryn
Kathryn    Catherine  Catherine  Catherine          Catherine

从上面您可以清楚地看到语音编码和字符串比较算法之间的组合可以非常直接。

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

根据声音相似度确定弦之间的距离 的相关文章

随机推荐

  • 基于索引模式到间接寻址模式的转换(x86 汇编)

    我目前正在努力将示例从复杂的间接寻址模式更改为简单的间接寻址模式片段 但是 我遇到了基于模式的示例 我无法 转换 Code move eax 28 esp 我试过了 addl 28 esp movl eax esp 这会产生分段错误 我不知
  • 如何在Linux服务器上的80端口启动node.js?

    当我尝试在端口 80 上启动节点时 错误告诉我该端口正在使用中 我想那是阿帕奇 接管 端口 80 并在服务器重新启动后保持这种状态的正确方法是什么 Linux xxxx com 2 6 32 5 amd64 1 SMP 6 月 14 日星期
  • R textConnection:“参数‘对象’必须解析为单个字符串”

    我想将字符串列表转换为数据框 但是 我收到此错误 gt read csv textConnection c id name count 6289 aa 16 6269 bb 8 6269 cc 8 6269 dd 8 6610 ee 4 E
  • 防止 jQuery 多重引用

    我正在开发 DNN 模块 并且在某些模块中使用 jQuery 我将 jQuery 引用添加到每个 ascx 文件的顶部 顺便说一句 当用户将多个模块添加到每次添加模块时引用的页面时 这种情况给出一些错误 当我从另一个模块底部的模块中删除引用
  • Outlook 将电子邮件标记为垃圾邮件

    我知道 我听起来像垃圾邮件发送者 但这些电子邮件对于在我们开发的这个网站上注册帐户的人来说是完全合法的电子邮件确认 这些电子邮件都会发送到各个邮件提供商 gmail yahoo aol hotmail live 但它们总是被定向到 Outl
  • 如何使用winsound同时播放多个声音?

    我正在尝试使用内置的winsound 库将多个声音叠加在一起 我开始我的第一个声音 winsound PlaySound test1 wav winsound SND FILENAME winsound SND ASYNC 当我尝试启动其他
  • 动画分割面板分隔线

    我有一个水平分割窗格 我想在单击按钮时更改分隔线位置 以便创建某种 幻灯片 动画 分隔线将从 0 完全向左 开始 单击时它会打开到 0 2 当我再次单击时 它会返回到 0 现在我实现了这一点 我只是使用 spane setdividerPo
  • 限制 = 1 = 1ms,限制 > 1 = 150 ms(芒果融化)

    使用 MongoDB Native Driver 查询如下 mo post find us us utc lte utc fields geo 0 bin 0 flg 0 mod 0 edt 0 hint us 1 utc 1 sort u
  • 如何使用 jQuery 禁止输入或粘贴字符(并替换它们)?

    我正在尝试找到一种方法来替换表单中所有输入字段 本质上是文本框和文本区域 中输入或粘贴的不允许的字符 每当用户粘贴包含一个或多个不允许的字符的文本时 我都希望将该字符替换为空字符串 但保持文本的其余部分完好无损 如果他们不断地输入字符 我只
  • 当折叠可见时,如何通过单击主体隐藏我的折叠 Bootstrap 3 导航栏?

    我正在为我将去工作的机构制作一个 WordPress 网站 我使用 Bootstrap 3 0 并创建了一个响应式菜单 如何在折叠和可见时隐藏菜单 第二张图片 单击主体 并且菜单按钮更改其颜色 只有折叠可见 bootstrap js 和 j
  • 使用 RDTSC 在 C 中计算 CPU 频率始终返回 0

    我们的讲师向我们提供了以下代码 以便我们可以测量一些算法的性能 include
  • UIScrollView 边界尚未在“viewDidLoad”中调整大小

    我有一个 UIViewController 子类 其视图在 NIB 文件中配置 该视图有一个 UIScrollView 子视图 UIScrollView 几乎占据了整个 NIB 文件 但它的超级视图作为子视图添加到一个更小的视图 在不同的
  • 组合框架:如何在继续之前异步处理数组的每个元素

    我在使用 iOS 组合框架时遇到了一些心理障碍 我正在将一些代码从远程 API 的 手动 获取转换为使用合并 基本上 API 是 SQL 和 REST 实际上它是 Salesforce 但这与问题无关 该代码用来执行的操作是调用带有完成处理
  • MySQL - 在相关子查询中限制聚合数据时嵌套子查询的替代方案

    我有一张看起来像这样的表 DataTable Date DailyData1 DailyData2 2012 01 23 146 30 212 45 2012 01 20 554 62 539 11 2012 01 19 710 69 53
  • R中删除文件夹及其子文件夹中的文件

    在 R 中 我试图删除文件夹及其子文件夹中的所有文件 但是 我想保持文件夹完好无损 最有效的方法是什么 fold lt C some path here get all files in the directories recursivel
  • 如何为单个绘图实例创建两个图例对象?

    我使用以下示例代码生成条形图 import numpy as np import matplotlib pyplot as plt x np linspace 0 5 5 y np exp x w x 1 x 0 colors blue i
  • 如何从命令提示符编译 servlet?

    我想编译一个非常基本的servlet从命令提示符 但它总是不成功 编译器告诉我以下内容 error package javax servlet does not exist 我用谷歌搜索了解决方案 发现我需要包括servlet jar库到我
  • 鼠标光标跳转到 IE 文本输入字段中字符串的开头

    当我单击其中包含文本的文本字段并将焦点设置到字符串的末尾 大多数人通常会这样做 时 光标的焦点会跳转到字符串的开头 这只发生在 IE 中 该应用程序是带有 jquery 和 javascript 的 MVC 2 如何调试这一行为 我不能使用
  • 如何迭代 JSONObject?

    我使用一个名为的 JSON 库JSONObject 如果需要的话我不介意切换 我知道如何迭代JSONArrays 但是当我解析来自 Facebook 的 JSON 数据时 我没有得到一个数组 只有一个JSONObject 但我需要能够通过其
  • 根据声音相似度确定弦之间的距离

    两个单词之间相似性的定量描述是基于它们的发音 发音 类似于编辑距离吗 我知道 soundex 给了相同的 id发音相似词 但据我理解 它不是词之间差异的定量描述 from jellyfish import soundex print sou