【问题标题】:Regex - How can you identify strings which are not words?正则表达式 - 如何识别不是单词的字符串?
【发布时间】:2023-02-03 18:04:52
【问题描述】:

有一个有趣的想法,但无法提出任何可靠的想法,因此认为也许其他人可能做过类似的事情。

我希望能够识别较长句子中不是单词的字母串并将其删除。本质上就像kuashdixbkjshakd

烦人的一切都是小写的,这使得它变得更加困难,但由于我只关心英语,所以我本质上是在寻找与辅音簇相反的辅音群,它们的组合不会发出语音上可发音的声音。

有没有人听说过/做过这样的事情?

编辑:这就是 ChatGpt 告诉我的

很难提供从未出现在英语单词中的辅音组合的完整列表。英语是一种充满活力和不断发展的语言,新词一直在创造。此外,该语言存在许多区域和方言变体,这可能导致世界不同地区使用不同的词组。

还值得注意的是,英语中特定辅音组合的使用频率很难量化,因为关于该主题的现有文献有限。确定特定辅音组合的使用频率的最佳方法是分析大量书面或口头英语语料库。

一般而言,大多数辅音组合在英语中的某些单词中使用,但某些辅音组合可能相对较少。英语中一些相对罕见的辅音组合示例包括“xh”、“xw”、“ckq”和“cqu”。但是,仍然有可能存在一些具有这些辅音组合的单词。

【问题讨论】:

  • 正则表达式可能不是这项特定任务的有效途径。如果你正在研究一种特定的语言,你可以尝试阐明它的音节结构;但这将对具有不同拼写的外来词或品牌名称(例如英语,“vkontakte”或“hryvnia”或“schadenfreude”或者,好吧,“tumblr”)失灵。
  • 辅音丛“……比如rhythm
  • 你使用什么语言/工具? “辅音群”有多长,您可能会将“y”算作元音。 《巫术》连续5场。 6是你的极限吗?
  • 辅音群是一组发出特定声音的辅音,如 ch th 等。我正在寻找一些不会发出可说话声音的辅音,但这似乎是不可能的。
  • 我认为正则表达式是这里工作的错误工具。它永远不会自行发展或改变,就像 ChatGPT 所说的语言会做这样的事情。也就是说,我认为这里最好的选择是本地或在线的字典/自动更正服务,具体取决于您的性能要求和目标系统。

标签: regex nlp


【解决方案1】:

您可以尝试将句子中的每个单词传递给一个函数,该函数检查该单词是否列在字典中。 GitHub 上有大量字典文本文件。为了加快这个过程:使用哈希图 :)

您还可以使用自动更正 API 或库。

结合两种方法的算法:

  1. 通过自动更正运行句子
  2. 通过字典运行每个单词
  3. 删除字典中没有的单词

    这可以删除不存在的拼写错误和单词。

【讨论】:

  • 这仍然会在现实世界的文本上失败,例如在其他语言中引用短语的地方。你或许可以期待存在的理由包含在综合英语单词列表中,但可能不会kalsarikännit。
  • 这是我最初的想法,但担心性能?
  • @devonuto 您对性能有何担忧?您的计算能力有限吗?使用正确的技术,这应该能够表现得很好。如果您的文本真的很大,您甚至可以将它们拆分并异步处理这些部分。
【解决方案2】:

这将匹配超过 5 个辅音的单词(您可能希望“y”不被视为辅音,但这取决于您):

[a-z]*[b-z&&[^aeiouy]]{6}[a-z]*

live demo

【讨论】:

  • 嗯,有意思。我猜我不太可能找到许多连续超过 5 个的单词。我会做一些测试,谢谢。
【解决方案3】:

您可以在您想要支持的语言中允许的字符序列上训练一个简单的模型,然后标记任何包含不在训练数据中的序列。

SpamAssassin 中的 LangId 语言检测器实现了 Cavnar & Trenkle 语言识别算法,该算法基本上在文本上使用滑动窗口并检查每个位置的相邻 1 到 5 个字符。所以从训练数据“abracadabra”你会得到

a 5
ab 2
abr 2
abra 2
abrac 1
b 2
br 2
bra 2
brac 1
braca 1
:

有了足够的数据,您就可以构建一个识别异常模式的模型(我的建议是一开始尝试使用 3 或更小的窗口大小,然后使用来自维基百科的几种人类语言对其进行训练)但是很难预测如何正是这样。

SpamAssassin 是用 Perl 编写的,提取语言识别模块应该不难。

作为替代方案,有一个名为 libtextcat 的库,您可以根据需要从 C 代码独立运行。我相信,LibreOffice 中的语言识别使用了一个分支,他们专门针对使用 Unicode 进行了调整(尽管自从我上次查看它已经有一段时间了)。

在 Cavnar & Trenkle 之后,所有这些都将收集的数据截断为几百种模式;您可能希望将其扩展到至少涵盖您在训练数据中找到的所有 3 克。

或许还可以查看 Gertjan van Noord 的链接集合:https://www.let.rug.nl/vannoord/TextCat/

根据您的测试数据,您仍然可能会得到误报,例如关于特殊的 Internet 域名和长缩写。调整你想要标记的限制 - 我认为即使你没有接受过德语培训,GmbH 也应该没问题,但可能应该标记和手动检查 7 个或更多字母长的东西。

【讨论】:

  • “Squiggles”是一个奇怪的极端案例。让我知道你是否尝试过这个(-:
猜你喜欢
  • 2022-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 2019-12-08
  • 2011-01-05
  • 1970-01-01
相关资源
最近更新 更多