一个通用的句子检查工具






3.43/5 (8投票s)
一个快速验证句子正确性的工具。
引言
你是否曾遇到过这种情况:在处理文档时,不知道如何组织某个句子,或者怀疑某个表达中某些词的顺序?即使句子或表达在语法和语法上都是正确的,它也可能在你使用的语言中没有意义。你可能只是把一些词以一种拼写和语法检查器不会抱怨,但没有人会那样使用的顺序来组织。
WCheck 是一个在你使用的拼写和语法检查器失效时能提供帮助的工具。据我所知,该工具可以用于任何语言。
它是如何工作的
如果你对某个表达有疑问,你可以向 WCheck 提供你认为最有意义的两个表达,然后 WCheck 会告诉你哪个表达最有可能正确。这个概率是基于 WCheck 在万维网上找到的匹配次数。
例如,在上面的图片中,你看到了两个表达:the hand that gives 和 the hand which gives。WCheck 发现第一个表达在万维网上有 29,200 次匹配,而第二个只有 141 次。这是一个重要的区别,可能会让你认为第一个表达很可能是正确的。如果你仍然不确定,你可以点击蓝色的下划线数字,然后 WCheck 会启动你的默认浏览器,并显示它在万维网上的搜索结果。
当然,WCheck 可以搜索的数据越多,预测就会越准确。这意味着,例如,如果你让 WCheck 搜索英文表达,结果将比输入斯瓦希里语表达更可靠。原因很简单:网络上可用的英文信息比斯瓦希里语要多得多。
但是,永远不要忘记,这不是万能的工具。所有关于正确性的陈述都取决于偶然的数字,因此不一定是真实的。
偏好设置
WCheck 可以选择两种方法来查找匹配次数:通过 Google API 或通过简单的 Google 搜索请求。如果你按下 Control 键,Reset 按钮的文本会变成“Setting”。然后当你点击按钮时,Preferences 对话框就会弹出。
正如你在上面的图片中看到的,搜索字符串类似于你在浏览器中执行 Google 搜索时生成的 URL。搜索字符串包含一个占位符,该占位符将被要检查的短语或单词填充。如果你想,例如,使用另一个搜索引擎,你可以输入一个新的搜索字符串。注意不要忘记添加占位符。
代理字段目前是禁用的。也许是为下一个版本准备的。
如果你想使用 Google API,你首先需要从 Google 网站(参见此链接)获取一个许可证密钥。另外,请注意,Google API 和 Google 搜索字符串为特定搜索参数返回的匹配次数是不同的。虽然我不清楚具体原因,但我并不在意,因为对于特定的搜索参数,重要的是匹配次数之间的差异,而不是绝对匹配次数。
在对话框的底部,你可以选择勾选“始终置顶”复选框。这将使该工具浮动在所有其他窗口之上。
使用代码
这不是一个高深莫测的应用程序。因此,我将不讨论整个应用程序,而仅仅强调一些有趣的方面,这些方面让我学到了新东西。这些新东西是:
- 如何使偏好设置持久化
- 解析 Google 搜索返回的结果
- 确定窗口在桌面上的位置
- 使用 Web 服务 (Google)
如何使偏好设置持久化
过去,我曾使用过多种方法来使用户偏好设置持久化。INI 文件、注册表项和 MS Application Building blocks 是最常用的。大约一年前,我偶然发现了 Chad Z. Hower 写的这篇 CodeProject 文章,题为 'Application settings the .Net way. INI, Registry, or XML"。它描述了如何使用 XML 来保存你的设置。这非常简单!只需在你的应用程序中添加一个新的 DataSet
,用你需要的偏好字段更新 DataSet
,然后编译。不要忘记将 MSDataSetGenerator
指定为你的 DataSet
定义的转换工具。Visual Studio 将使用这个工具将 DataSet
转换成一组类,你可以用它们来管理你的偏好设置。
在 WCheck 应用程序中,我使用了三个类:frmPreferences
、PreferenceData
和 Config
。frmPreferences
类是一个简单的 Form
类,定义了偏好设置对话框。PreferenceData
类代表应用程序看到的偏好设置数据,并包含 LoadFromDisk
和 SaveToDisk
等方法。最后,Config
是基于 Config.xsd DataSet
生成的类。实际上,Config
类代表了磁盘上的偏好设置数据。
解析 Google 搜索返回的结果
查看 Google 搜索返回的结果时,你会看到匹配次数在页面顶部附近。在这个 HTML 页面的源代码中,可以通过搜索“&swrnum”短语找到匹配次数:数字就在它的右边。因此,为了将数字显示在我的 WCheck 窗口中,HTML 代码使用正则表达式进行解析。这是如何操作的:
// numberOfHits will contain the result at the end of the method
ulong numberOfHits = 0;
...
// Get the HTML source out of a stream
string returnedValue = readStream.ReadToEnd();
Regex r = new Regex("&swrnum");
// Find a single match in the string.
Match m = r.Match(returnedValue);
if (m.Success)
{
int i = m.Index + 1;
while(returnedValue[i++] != '=');
int start = i;
while(returnedValue[i++] != '>');
string numberStr = returnedValue.Substring(start,i-start-1);
numberOfHits = Convert.ToUInt64(numberStr);
}
确定窗口在桌面上的位置
我希望应用程序能记住它在屏幕上的最后一个位置。getFormRect
方法的实现方式是让 WCheck 窗体始终完全显示在主屏幕上。每当主窗体的某一部分超出工作区域时,就会使用默认位置。
private Rectangle getFormRect ()
{
// Get Form Bounds
Rectangle newFormRect = this.DesktopBounds;
// Update the current position with the last known position
newFormRect.X = m_Preferences.MainFrameX;
newFormRect.Y = m_Preferences.MainFrameY;
// Get maximum drawing area
System.Drawing.Rectangle workingRectangle =
Screen.PrimaryScreen.WorkingArea;
// Check whether the Form is completely visible
if( ((newFormRect.X < 0) || (newFormRect.Y < 0)) ||
(((newFormRect.X + newFormRect.Width) > workingRectangle.Width) ||
((newFormRect.Y + newFormRect.Height) > workingRectangle.Height)
)
)
{
// Set default position
newFormRect.X = 1;
newFormRect.Y = workingRectangle.Height - newFormRect.Height - 1;
}
return newFormRect;
}
使用 Web 服务
要使用 Google Web 服务,你必须在你的项目中添加一个 Web 引用。Web 服务的 URL 可以在这里找到。一旦引用添加到项目中,你就可以通过对象浏览器深入了解。
请查看这个网站,了解 Google API 仍然存在至少一个问题。
已知问题
有时,在点击 Check 按钮时,WCheck 会返回一个错误。一旦我启动 Explorer,问题就会消失。我不知道为什么会这样,但说实话,我还没有仔细研究过。关注点
在制作这个小应用程序的过程中,我发现有趣的事情有:
- 使用 Google API
- 学习一些 .Net 细节
想法
你知道 Babylon 这个工具吗?它是我最喜欢的 PC 工具之一。我希望这个工具能扩展 WCheck 的功能。嘿,伙计们,这是一个建议!;-)历史
- 2006 年 10 月 28 日 - 版本 1.0.2.0,初始发布。