识别、查找和删除 txt 或 doc 文件中的重复单词

识别、查找和删除 txt 或 doc 文件中的重复单词

我收到了几份包含数千个单词的文本文档(每个单词占一行)。我确定其中有重复的单词,需要删除这些重复的单词,只保留其中的一个。我将所有这些单词复制/粘贴到 MS 文档中,现在我需要查找重复的单词并删除多余的单词。逐个查找然后删除很无聊,而且很费时间,有些单词我可能看不到。我需要软件或方法在 MS Word 中一次性完成此操作。可以搜索所有单词,并给我一个结果列表,告诉我保留其中一个单词,删除其余单词以清理我的列表。我在 Windows 10 x64 上使用 MS Word 2019。有没有宏或简单的方法可以解决这个问题?我在谷歌上找到了旧的宏,但在 MS Word 2019 上不起作用,而且也很复杂。正在寻找一种更简单的方法或具有简单用户界面的程序来完成它。免费或试用版软件将不胜感激。

答案1

如果您有 Excel,则可以将列表复制到电子表格中(如果在单独的行中,则应将它们粘贴为单个列中每个单词的单独单元格/行)。然后,您可以使用 Excel 的“删除重复项”功能(在“数据”选项卡上)。

答案2

您可以使用 PowerShell 来执行此操作,要打开 Powershell,请使用 Win+R->键入 PowerShell -> Enter;基本思想是先创建一个空数组,然后检查数组是否已经包含该单词,仅当数组不包含该单词时才将该单词添加到数组中。

您说每个单词都在其自己的单独行中,那么使用这些代码来实现就很简单了:

[array]$words=get-content "path\to\file\files.txt"
$uniquewords=@()
foreach ($word in $words) {
    if ($uniquewords -notcontains $word) {$uniquewords += $word}
}
$uniquewords | out-file "path\to\file\files.txt"

更新根据评论:

数组是一种数据结构,用于存储项目集合。项目可以是相同类型,也可以是不同类型。

Microsoft Docs:数组

([System.Array]) 是一种[Array]PowerShell 对象,它是项目的集合,可以使用 PowerShell 命令轻松遍历和操作数组。

用于[array] | get-member -static获取 [array] 的所有可用方法。

要使变量成为 [数组],请在其前面放置 [数组];

第一行,get-content 获取位于“path\to\file\files.txt”的文件的内容,并将结果赋值给名为 words 的变量,美元符号 $ 表示其后的字符串为变量名。该变量是一个 [array],因为 [array] 放在它前面。

Get-Content 将每一行作为单独的字符串返回,因此每一行都是 $words [数组] 中的一个元素。

第二条命令创建一个名为 unique word 的空的[数组]。

在第三行中,foreach ($word in $words)表示针对名为 words 的数组中的每个项目(针对每个项目,一个接一个,按顺序)

例如:

$array=@('one','two','three','four','five')

上面这行代码创建了一个名为 $array 的 [数组],其中包含五个元素,每个单词都是一个元素,元素是 [字符串],因为它们被引号括起来了。元素之间用逗号分隔。

尝试这个命令:

foreach ($arra in $array) {$arra}

这将输出:

one
two
three
four
five

() 里面是条件,{} 里面是脚本块(要执行的命令)。

foreach 语句的脚本块,

 if ($uniquewords -notcontains $word) {$uniquewords += $word}

这是一个 if 条件语句,() 中的是条件,{} 中的是脚本块。

-notcontains 是一个运算符,表示它前面的东西不包含它后面的东西(正如它的名字所表达的),+= 是一个运算符,表示它后面的东西添加到它前面的东西中。

if 语句的意思是如果 $uniquewords 不包含该单词,则将该单词添加到 $uniquewords 中。

最后一行将 $uniquewords 的内容输出到文件。

foreach 语句确保每个单词都被处理。

至于如何替换路径,将“path\to\file\files.txt”替换为文件的完整路径。

例如,如果文件名为 textfile.txt 存储在桌面上,那么它位于 %userprofile%\desktop 中,您的用户名是 username,其完整路径为 C:\Users\Username\Desktop\textfile.txt

在 cmd 中,您可以使用 %userprofile%\desktop\textfile.txt 来指示任何用户名的完整路径。

在 PowerShell 中,改用以下命令:

$Desktop=[$Environment]::GetFolderPath('Desktop')
${Desktop}\textfile.txt

如果您真的不懂编程,无论它有多简单,您都无法理解它,请使用Shift+RMB并向下滚动以在上下文菜单中找到“复制为路径”,然后在资源管理器中找到文件后单击它LMB

要替换路径,请将“path\to\file\files.txt”替换为文件的完整路径。

例如,如果文件名为 textfile.txt,存储在 C:\somefolder\

用这个:

[array]$words=get-content "C:\somefolder\textfile.txt"
......
$uniquewords=set-content "C:\somefolder\textfile.txt"

很抱歉我无法让它变得更简单......

相关内容