regex 正则表达式-如何识别不是单词的字符串?

wtlkbnrh  于 2023-02-10  发布在  其他
关注(0)|答案(3)|浏览(127)

得到了一个有趣的,不能拿出任何坚实的想法,所以想也许别人可能已经做了类似的事情。
我希望能够识别较长句子中不是单词的字母串并删除它们。
令人讨厌的是,所有的东西都是小写的,这使得它更加困难,但由于我只关心英语,我基本上是在寻找辅音簇的对立面,它们的组合不发出语音上可发音的声音。
以前有人听说过/做过类似的事情吗?
编辑:这是ChatGpt告诉我的
很难提供一个从未在英语单词中出现过的辅音组合的完整列表。英语是一种动态和不断发展的语言,并且新单词一直在被创造。此外,语言有许多区域和方言变体,这可能导致在世界不同地区使用不同的单词集。
同样值得注意的是,英语中特定辅音组合的使用频率很难量化,因为现有的相关文献有限。确定特定辅音组合的使用频率的最佳方法是分析大型书面或口语语料库。
一般来说,大多数辅音组合都用在英语语言中的一些单词中,但有些辅音组合可能相对罕见,英语中相对罕见的辅音组合的一些例子包括“xh”、“xw”、“ckq”和“cqu”,然而,仍然有可能存在一些具有这些辅音组合的单词。

6bc51xsx

6bc51xsx1#

你可以尝试将句子中的每个单词传递给一个函数来检查这个单词是否在字典中列出。GitHub上有大量的字典文本文件。为了加快这个过程:使用散列Map:)
您还可以使用自动更正API或库。
合并两种方法的算法:
1.通过自动更正运行句子
1.把每个词都查字典
1.删除词典中未列出的单词
这可以删 debugging 别字和不存在的单词。

t98cgbkg

t98cgbkg2#

您可以在您想要支持的语言中允许的字符序列上训练一个简单的模型,然后标记任何包含训练数据中没有的序列的模型。
SpamAssassin中的LangId语言检测器实现了Cavnar & Trenkle语言识别算法,该算法基本上在文本上使用滑动窗口,并检查每个位置上相邻的1到5个字符。

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中的语言标识使用了一个fork,我相信他们专门使用了Unicode(尽管我上次看这个已经有一段时间了)。
在Cavnar和Trenkle之后,所有这些方法都将收集到的数据截断为几百个模式;你可能会想要扩展这一点,以覆盖所有的3克,你发现在你的训练数据至少。
也许还可以看到Gertjan货车Noord的链接集合:https://www.let.rug.nl/vannoord/TextCat/
根据您的测试数据,您仍然可能得到假阳性,例如特殊的互联网域名和长缩写。调整您想要标记的限制-我认为GmbH应该是好的,即使你没有接受德语培训,但像7个或更多字母长的东西可能应该被标记和手动检查。

h9vpoimq

h9vpoimq3#

这将匹配具有5个以上辅音的单词(您可能不希望"y"被视为辅音,但这取决于您):

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

参见live demo
选择5是因为我相信在所有英语单词中,* wickcraft * 的辅音链最长。如果不介意匹配一些异常值,你可以在正则表达式中将"6"拨回到5甚至4。

相关问题