当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 我的 PowerShell 字数统计解决方案

作者:精品下载站 日期:2024-12-14 08:01:39 浏览:14 分类:玩电脑

我的 PowerShell 字数统计解决方案


几天前,我发布了一个快速的 PowerShell 谜题,作为外观公告的一部分。

使用about_Splatting帮助文件时,哪个词最常用?如果能显示前5名就更好了。理想情况下,您的代码会将“for”和“for”等单词视为相同。为了加分,创建一个简单的自定义对象,显示帮助主题名称、总单词数、“,”不是单词、顶部单词和顶部单词数。另外,尝试跳过“the”,它几乎总是一个常用词。

一些人发布了他们的解决方案的链接。如果你想尝试解决这个问题,请停止阅读并稍后回来将你的工作与我的进行比较。

我的解决方案

首先,我会第一个告诉你,我的答案不是唯一的解决方案,甚至不是最好的解决方案。但它完成了工作,所以它“足够好”。

我的解决方案被编写为 PowerShell 脚本,以便我可以轻松地使用其他 abou_* help t 主题对其进行测试。该脚本只不过是两个 PowerShell 表达式。

Param([string]$topic = "About_splatting")

#I'm filtering out words 'the', 'a' and 'an' before
#selecting the most-used word.
$results = ($(Get-Help $topic).split()) -replace "\W|_","" |
Where-Object {$_} -OutVariable all | Group-Object |
Where-Object {$_.name -notmatch "\b(the|a|an)\b"} |
Sort-Object -property count -Descending |
Select-Object -first 5

#create a custom object
[PSCustomObject]@{
    Topic = $topic
    TotalWords = $all.Count
    TopWord = $results[0].Name
    TopWordCount = $results[0].count
    PSVersion = $PSVersionTable.PSVersion
}

这是它的工作原理。 Get-Help 将字符串对象写入管道。我使用默认的空格分割字符串,然后将每个非单词字符 (\W) 或下划线替换为空。这具有解析出“about_”并将其视为“about”的效果。这些结果被发送到Where-Object,后者过滤掉空行。我可以在命令的第一部分中包含这种正则表达式解析。这留下了一个单词列表。请注意,我使用 -OutVariable 将此特定命令的输出保存到变量 $all。我稍后会用这个。

然后再次对这些单词进行分组和过滤,以忽略常见单词“the”、“a”和“an”。然后,过滤后的组结果在 count 属性上按降序排序,我选择前 5 个。尽管我可能只需要前 1 个。

脚本的最后部分根据 $results 中的第一项创建自定义文件。我可以为 $results 中的每个项目创建一个自定义对象。无论如何,这就是我最终的结果。

[玩转系统] 我的 PowerShell 字数统计解决方案

[玩转系统] 我的 PowerShell 字数统计解决方案

您的大部分 PowerShell 工作都涉及使用管道中的对象。如果您可以形象化该过程,或者至少口头描述它,我想您会发现 PowerShell 更易于使用和编写。问题的目标不是没有实际价值的最终结果,而是增强你的 PowerShell 能力。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯