Golang如何过滤文本中的不良词汇
Golang如何过滤文本中的不良词汇 你好
我编写了过滤不良词汇的代码,希望你能在聊天项目或项目评论页面中使用。这个代码非常快速且轻量级,请告诉我你对代码的评价或批评,感谢阅读。
FilterBadWords - 过滤所有词汇
此致
更多关于Golang如何过滤文本中的不良词汇的实战教程也可以访问 https://www.itying.com/category-94-b0.html
是的,我会在你的帮助下更新那个库,但目前我没有时间。
感谢回复
更多关于Golang如何过滤文本中的不良词汇的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
目前它是一个 main 包。您是否计划将其改造成可在聊天或论坛程序中引用的库包?
非常感谢您的回复。感谢约翰·斯图亚特的鼓励、改进以及出色的工程技术。我会根据改进来执行您的建议。
此致 敬礼
你好 Hamed,
我阅读了你的代码,很喜欢。你有一个很棒的程序,我想鼓励你改进它并将其公开为一个可供人们使用的 Go 库。
以下是一些反馈,即你可以添加的改进建议。
可用性:
- 在 README 中添加关于程序限制的信息,例如:“我在一个包含 1,000,000 个字符的文本上测试了此程序,其中 10% 是敏感词,程序在 2.3 秒内完成”
- 提供一种方式,能够导入和使用多个敏感词文件,支持多种格式(txt、csv、json、xls)
- 让用户可以选择使用哪些敏感词文件,即将方法 FilterBadWords(content string) string 改为 FilterBadWords(content string, badWordsFiles …string) string
- 让你的程序将数字和重复字符视为字母处理,例如,如果 “aien” 是敏感词,那么 “ai3n” 和 “aaien” 也应被视为敏感词
工程方面:
- 目前你的程序仅在单个处理器上运行。如果将工作拆分到多个处理器,运行时间会快得多。因此,请使用 goroutine 来实现这一点。
- 在最终产品中移除
Println(how long did it take) - 选择一个更具提示性的包名,并添加包注释(在
package main之上的注释),解释其功能和使用场景 - 在
FilterBadWords函数上方添加更详细的注释,解释你打算使用的算法 - 你并未使用这个
mkSliceMap做任何事情 - 对于大型输入文件,将结果写入文件,不要将其作为字符串返回
- 对于大型输入文件,你获取输入字符串,移除所有非 a-zA-Z 字符,然后将所有内容转换为小写,并将其存储在
joinString变量的内存中——这会消耗大量内存 - 每次找到敏感词时,你都会在
content字符串中进行替换——这也会消耗大量内存
对于最后两点改进,尝试找到一个在内存方面更优、并且能在多个处理器上运行的更好算法。例如,如果你愿意分配足够的内存来存储最终答案(如果输入是 1,000,000 个字符,那么 joinString 将具有相似的大小)——更好的做法是遍历输入直到遇到空格字符,这样你就找到了下一个单词,然后将这个单词(或者如果是敏感词则写入 ***)写入输出变量。
更好的做法是,使用 2 个处理器,让一个处理文本的第一部分,另一个处理第二部分。在这两个处理器完成后,将结果写入文件并返回该文件。
希望这对你有所帮助,并希望你继续完善这个程序。


