Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 找一个更好的正则表达式来标记法语单词中的省略_Python_Regex - Fatal编程技术网

Python 找一个更好的正则表达式来标记法语单词中的省略

Python 找一个更好的正则表达式来标记法语单词中的省略,python,regex,Python,Regex,我有一句话: sentence1 = "Vincennes Confirmation des privilèges de la villed'Aire au bailliage d'Amiens Mai 1498 Aire-sur-la-Lys, Pas-de-Calais, arrondissement de Saint-Omer." 下面的脚本返回开始偏移量、结束偏移量和单词: 重新导入 对于re.finditer中的元素(r“[\w'-]+|[,!?;]”,第1句)

我有一句话:

sentence1 = "Vincennes Confirmation des privilèges de la villed'Aire au bailliage d'Amiens Mai 1498 Aire-sur-la-Lys, Pas-de-Calais, arrondissement de Saint-Omer."

下面的脚本返回开始偏移量、结束偏移量和单词:

重新导入
对于re.finditer中的元素(r“[\w'-]+|[,!?;]”,第1句):
start=element.start()
end=element.end()
value=语句1[开始:结束]
打印(开始、结束、值)
我得到以下输出:

0 9 Vincennes
10 22 Confirmation
23 26 des
27 37 privilèges
38 40 de
41 43 la
44 55 villed'Aire
56 58 au
59 68 bailliage
69 77 d'Amiens
78 81 Mai
82 86 1498
87 102 Aire-sur-la-Lys
102 103 ,
104 117 Pas-de-Calais
117 118 ,
119 133 arrondissement
134 136 de
137 147 Saint-Omer

...
我的输出是我想要的,但我正在寻找比
[\w'-]+|[,!?;]
更好的正则表达式来标记带撇号的单词,例如:

d'Amiens => ["d'", "Amiens"]
d'Abrimcourt =>> ["d'", "Abrimcourt"]
...

but not :

villed'Aire => ["villed'Aire"]
...

有人有主意吗?谢谢。

您可以使用

\b[dlnmtsj]'|\w+(?:['-]\w+*|[,!?;]
\b[dlnmtsj]'|\w+(?:['-]\w+*|[^\w\s]

详情:

  • \b[dlnmtsj]
    -一个单词的开头,然后是
    d
    (例如
    d'argent
    ),
    l
    (例如
    l'huile
    ),
    n
    (例如
    n'en
    ),
    m
    (例如
    m'appelle
    ),
    t
    (例如
    t'appelle>,
    s>(例如,
    j'ai
    )后跟
  • |
    -或
  • \w+(?:['-]\w+*
    -一个或多个单词字符后跟
    '
    -
    ,然后是一个或多个单词字符
  • |
    -或
  • [,!?;]
    -
    。替换为
    [^\w\s]
    ,以匹配除单词和空格字符以外的任何字符

听起来你可能想要一个比正则表达式更精致的工具——也许是nltk?@LucasTerriel是的,如果你需要将
字符视为一个特殊的断字字符,你应该使用
\b[dlnmtsj]'.[^\W.+(?:['-][^\W.]+*.[^\W\s].