- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在创建一个程序来检查单词是否为简化字(txt、msg 等),如果是简化字,它会找到正确的拼写,如 txt=text、msg=message。我在 c# 中使用 NHunspell 建议方法,它建议所有可能的结果。
问题是,如果我输入“txt”,结果是text、tat、tot 等。我不知道如何选择正确的词。我使用了 Levenshtein 距离 ( C# - Compare String Similarity ),但结果仍然为 1。
输入:txt结果:text = 1, ext = 1 tit = 1
您能帮我了解一下简化词的含义或正确拼写吗?示例:消息
最佳答案
我已经用您的示例数据测试了您的输入,只有 text
的距离为 25,而另一个的距离为 33。这是我的代码:
string input = "TXT";
string[] words = new[]{"text","tat","tot"};
var levenshtein = new Levenshtein();
const int maxDistance = 30;
var distanceGroups = words
.Select(w => new
{
Word = w,
Distance = levenshtein.iLD(w.ToUpperInvariant(), input)
})
.Where(x => x.Distance <= maxDistance)
.GroupBy(x => x.Distance)
.OrderBy(g => g.Key)
.ToList();
foreach (var topCandidate in distanceGroups.First())
Console.WriteLine("Word:{0} Distance:{1}", topCandidate.Word, topCandidate.Distance);
这是 levenshtein 类:
public class Levenshtein
{
///*****************************
/// Compute Levenshtein distance
/// Memory efficient version
///*****************************
public int iLD(String sRow, String sCol)
{
int RowLen = sRow.Length; // length of sRow
int ColLen = sCol.Length; // length of sCol
int RowIdx; // iterates through sRow
int ColIdx; // iterates through sCol
char Row_i; // ith character of sRow
char Col_j; // jth character of sCol
int cost; // cost
/// Test string length
if (Math.Max(sRow.Length, sCol.Length) > Math.Pow(2, 31))
throw (new Exception("\nMaximum string length in Levenshtein.iLD is " + Math.Pow(2, 31) + ".\nYours is " + Math.Max(sRow.Length, sCol.Length) + "."));
// Step 1
if (RowLen == 0)
{
return ColLen;
}
if (ColLen == 0)
{
return RowLen;
}
/// Create the two vectors
int[] v0 = new int[RowLen + 1];
int[] v1 = new int[RowLen + 1];
int[] vTmp;
/// Step 2
/// Initialize the first vector
for (RowIdx = 1; RowIdx <= RowLen; RowIdx++)
{
v0[RowIdx] = RowIdx;
}
// Step 3
/// Fore each column
for (ColIdx = 1; ColIdx <= ColLen; ColIdx++)
{
/// Set the 0'th element to the column number
v1[0] = ColIdx;
Col_j = sCol[ColIdx - 1];
// Step 4
/// Fore each row
for (RowIdx = 1; RowIdx <= RowLen; RowIdx++)
{
Row_i = sRow[RowIdx - 1];
// Step 5
if (Row_i == Col_j)
{
cost = 0;
}
else
{
cost = 1;
}
// Step 6
/// Find minimum
int m_min = v0[RowIdx] + 1;
int b = v1[RowIdx - 1] + 1;
int c = v0[RowIdx - 1] + cost;
if (b < m_min)
{
m_min = b;
}
if (c < m_min)
{
m_min = c;
}
v1[RowIdx] = m_min;
}
/// Swap the vectors
vTmp = v0;
v0 = v1;
v1 = vTmp;
}
// Step 7
/// Value between 0 - 100
/// 0==perfect match 100==totaly different
///
/// The vectors where swaped one last time at the end of the last loop,
/// that is why the result is now in v0 rather than in v1
//System.Console.WriteLine("iDist=" + v0[RowLen]);
int max = System.Math.Max(RowLen, ColLen);
return ((100 * v0[RowLen]) / max);
}
///*****************************
/// Compute the min
///*****************************
private int Minimum(int a, int b, int c)
{
int mi = a;
if (b < mi)
{
mi = b;
}
if (c < mi)
{
mi = c;
}
return mi;
}
///*****************************
/// Compute Levenshtein distance
///*****************************
public int LD(String sNew, String sOld)
{
int[,] matrix; // matrix
int sNewLen = sNew.Length; // length of sNew
int sOldLen = sOld.Length; // length of sOld
int sNewIdx; // iterates through sNew
int sOldIdx; // iterates through sOld
char sNew_i; // ith character of sNew
char sOld_j; // jth character of sOld
int cost; // cost
/// Test string length
if (Math.Max(sNew.Length, sOld.Length) > Math.Pow(2, 31))
throw (new Exception("\nMaximum string length in Levenshtein.LD is " + Math.Pow(2, 31) + ".\nYours is " + Math.Max(sNew.Length, sOld.Length) + "."));
// Step 1
if (sNewLen == 0)
{
return sOldLen;
}
if (sOldLen == 0)
{
return sNewLen;
}
matrix = new int[sNewLen + 1, sOldLen + 1];
// Step 2
for (sNewIdx = 0; sNewIdx <= sNewLen; sNewIdx++)
{
matrix[sNewIdx, 0] = sNewIdx;
}
for (sOldIdx = 0; sOldIdx <= sOldLen; sOldIdx++)
{
matrix[0, sOldIdx] = sOldIdx;
}
// Step 3
for (sNewIdx = 1; sNewIdx <= sNewLen; sNewIdx++)
{
sNew_i = sNew[sNewIdx - 1];
// Step 4
for (sOldIdx = 1; sOldIdx <= sOldLen; sOldIdx++)
{
sOld_j = sOld[sOldIdx - 1];
// Step 5
if (sNew_i == sOld_j)
{
cost = 0;
}
else
{
cost = 1;
}
// Step 6
matrix[sNewIdx, sOldIdx] = Minimum(matrix[sNewIdx - 1, sOldIdx] + 1, matrix[sNewIdx, sOldIdx - 1] + 1, matrix[sNewIdx - 1, sOldIdx - 1] + cost);
}
}
// Step 7
/// Value between 0 - 100
/// 0==perfect match 100==totaly different
//System.Console.WriteLine("Dist=" + matrix[sNewLen, sOldLen]);
int max = System.Math.Max(sNewLen, sOldLen);
return (100 * matrix[sNewLen, sOldLen]) / max;
}
}
关于c# - 除了计算距离之外,如何衡量 2 个字符串的相似性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17748969/
当今的大多数处理器都配备了硬件性能计数器。此类计数器可用于对微架构事件进行计数,以便分析目标程序以提高其性能。通常,分析和分析是这些计数器的主要目标。 根据文献中的研究论文,这些计数器缺乏准确性。例如
提前声明一下,我对SQL查询的算法了解甚少,请原谅我的无知。 我的问题是:您如何评估特定 SQL 查询的性能?考虑了哪些指标? 例如, SELECT * FROM MyTable; 和 SELECT
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
大多数编程语言中方法的复杂度可以用静态源代码分析器的圈复杂度来衡量。是否有类似的度量标准来衡量 SQL 查询的复杂性? 测量查询返回所需的时间很简单,但是如果我只想量化查询的复杂程度怎么办? [编辑/
我正在开发一个至少有 15 年历史的应用程序。我正在致力于提高具有大约 10K 行代码的特定流程的性能。此流程涉及向外部系统发送有关 JMS 主题的信息。我在创建和缓存 session 的方式中发现了
我如何衡量 Clojure 程序使用了多少内存? 我已经注意到,即使是小程序,也就是这样说 (println "Hello World") 可以消耗几十兆内存,按时间(GNU时间),ps 和其他类似的
我正在开发一个 jQuery 插件,但我不知道哪个版本的 jQuery 是我的插件运行的最小版本。 有什么方法可以衡量我的 jQuery 插件的要求吗? 最佳答案 一些想法: 我没有使用过这个,但快速
我有一个 JavaScript 文件,它接受一个输入,用它做一些计算,然后返回一个结果。现在,我想测量它的性能,例如检查运行 1.000 个输入需要多少时间。问题是我几乎不了解 Javascript(
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 6年前关闭。 Improve this questi
使用 Play 框架测试(未部署的)应用程序性能的最佳工具是什么?比如,请求执行需要多长时间,使用不同的参数,模拟大量请求(压力测试)等。 我搜索了一段时间,但问题是关键字“performance”、
我想知道是否有人知道一个好的 Java 库可以用来衡量 HTML 等效性? 例如相当于 .我想使用 Java 以这种方式比较整个多行 html 字符串。 有什么建议吗? 更新: 所以我尝试使用 Xm
我目前正在使用 VisualVM,但我遇到的问题是我无法保存它生成的图表。我需要报告有关其内存使用情况和运行时间的一些数据,尽管使用 System.nanoTime() 很容易获得运行时间。我也尝试过
我正在尝试对我们的前端进行全面分析,我想知道是否有任何工具可以自动测量 Javascript。 例如: 函数的执行(不需要我在记录之前/之后手动放置日期对象) 我页面上的哪个脚本最慢,为什么 找出我需
假设我有一个有 1000 个并发用户的应用。 衡量 Tomcat 性能的最佳方法是什么?如何确定最大数据库连接数(池)? 如何追踪内存泄漏、CPU 泄漏? 最佳答案 Let's say that I
我需要衡量 React Native 应用程序的性能。什么是最好的工具? 我在 google chrome 中尝试使用 google trace,在 iOS 平台上尝试使用 mac 中的 Instru
我有一些 xaml 文件在整个应用程序中使用。我希望编写单元测试来测试每个 xaml 文件的性能,换句话说,加载/解析和呈现其中一个窗口(使用某些 xaml 文件)需要多长时间。 我发现 XamlRe
我有一个 Web 应用程序,其中包含多个用于 B2B 应用程序的同质 Web 前端(具体来说,我在 App Engine 上运行)。我需要设计一个短期配额系统,以便在客户的突发请求率超过他们的配额时拒
有什么方法可以衡量 Redis Lua 脚本的性能吗? 我有一个 lua 脚本,我最终得到了一个略有不同的实现,我想知道是否有任何方法可以衡量这两个实现中哪个更快。 最佳答案 您可以调用 Redis
我使用 qperf 工具测量 AWS EC2 实例之间的延迟。首先,我测试了两个 c5xlarge 实例之间的 tcp 延迟,我得到了 30 微秒的延迟。后来我终止了这些实例并在新的两个 c5xlar
哪个影响最大? 在 Release模式和 Debug模式下构建 ASP.NET 应用程序 设置在 web.config 中 考虑到性能和内存使用情况,是否有人进行过任何测试以获取有关差异的实际数字?
我是一名优秀的程序员,十分优秀!