Регулярное выражение границы слова не соответствует всему слову для сценария Девнагари - PullRequest
2 голосов
/ 10 июня 2019
articles = ['a','an','the']
regex = r"\b(?:{})\b".format("|".join(word))
sent = 'Davis is theta'
re.split(regex,sent)
>> ['Davis ', ' theta']

Этот фрагмент работает с английским языком, но используется со сценариями Devnagari, он также соответствует частичному слову.

stopwords = ['कम','र','छ']
regex = r"\b(?:{})\b".format("|".join(stopwords))
sent = "रामको कम्पनी छ"
re.split(regex,sent)
>> ['', 'ामको ', '्पनी छ']

Ожидаемый вывод

['रामको' 'कम्पनी']

Я использую python3.Это ошибка или я что-то упустил?

Я подозреваю, что / b соответствует [a-zA-Z0-9], и я использую Unicode.Есть ли альтернатива этой задаче?

1 Ответ

1 голос
/ 10 июня 2019

Вы можете использовать этот код, используя findall вместо split:

import re

stopwords = ['कम','र','छ']
reg = re.compile(r'(?!(?:{})(?!\S))\S+'.format("|".join(stopwords)))

sent = 'रामको कम्पनी छ'
print (reg.findall(sent))

Это регулярное выражение избегает использования границы слова, которая плохо работает с текстом Unicode, таким как Деванагри.

Демонстрация кода RegEx

Проверка: сбой сопоставления регулярного выражения Unicode Python с некоторыми символами Unicode - ошибка или ошибка?

...