从标记格式到正则表达式的翻译

2024-05-15 03:12:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用一个名为AntConc的语料库语言学工具,在这个工具中,你有一个文档,其中每个单词都被标记为词性(名词、形容词等),你可以使用特定的命令来提取匹配项。例如,如果我正在寻找一个名词(标记为NN),我将使用*_NN,它将找到文档中的每个名词。你知道吗

我需要将我的*_TAG语法翻译成python regex,我不知道该怎么做。例如,我有一个短语:*_PP$ *_NN *_DT *_JJ *_NN(这翻译成所有格代词,名词,限定词,形容词,名词;它会发现像“她的声音完全重复”)的标签格式。你知道吗

怎样才能把这样的东西改成正则表达式呢?现在,我只接受那些基本的东西。稍后我会担心如何做“或”和“如果这然后这个”等等。你知道吗

如果您需要有关标签的更多信息,请尝试搜索POS标签爪,这将为您提供一个列表。你知道吗

非常感谢你的帮助!你知道吗


Tags: 工具文档标记命令tag语法nn标签
1条回答
网友
1楼 · 发布于 2024-05-15 03:12:13

所以我做了一些研究,发现this PDF file描述了嵌入标记和非嵌入标记的概念。您正在查找嵌入的标记。如果我是对的,输入应该是这样的,对吗?你知道吗

her_PP$ voice_NN an_DT exact_JJ duplicate_NN

只有在更大的文本体中,你不知道实际的单词,你只知道_XX标记。你知道吗

在正则表达式中,必须比*更具体。在*中,您需要的是一个或多个作为单词一部分的字符(字母,但也可能包含连字符?)。所以这个名词是这样的:

[\w-]+_NN

这意味着word characters ^{}character class ^{},连字符-repeated one or more times ^{},后跟_NN。你知道吗

对于所有格代词,它有一个$,在正则表达式中有一个特殊的意义,如果你想要字符而不是它的特殊意义,你需要用前面的\来转义它,就像这样:

[\w-]+_PP\$

最后,您要考虑单词之间允许使用哪些字符。可以是空白,比如空格、制表符和输入,也就是\s+。也可以是“任何不是单词字符的字符”,以允许句点、逗号、引号、冒号等\W+(注意大写W与小写\w相反)。你知道吗

加起来等于:

[\w-]+_PP\$\W+[\w-]+_NN\W+[\w-]+_DT\W+[\w-]+_JJ\W+[\w-]+_NN

Regular expression visualization

Debuggex Demo

要做到“未知数量的单词”你可以这样做:

(?:[\w-]+\W+)*?

因此,匹配单词[\w-]+的部分和介于\W+之间的部分被包装成一个非捕获组(?:...),并且该组被称为与*一起出现0次或更多次,但是与?一起出现的次数尽可能少,以避免greediness。您可以看到它here并删除或添加一个X以查看它是否仍然匹配。你知道吗

相关问题 更多 >

    热门问题