Замена точек для списка сокращений? - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь убрать точки списка сокращений, чтобы они не перепутали предложение токенизатора.Это должно быть очень просто.Не знаю, почему мой код не работает.

Ниже, пожалуйста, найдите мой код:

abbrevs = [
    "No.", "U.S.", "Mses.", "B.S.", "B.A.", "D.C.", "B.Tech.", "Pte.", "Mr.", "O.E.M.",
    "I.R.S", "sq.", "Reg.", "S-K."
]



def replace_abbrev(abbrs, text):
    re_abbrs = [r"\b" + re.escape(a) + r"\b" for a in abbrs]

    abbr_no_dot = [a.replace(".", "") for a in abbrs]

    pattern_zip = zip(re_abbrs, abbr_no_dot)

    for p in pattern_zip:
        text = re.sub(p[0], p[1], text)

    return text

text = "Test No. U.S. Mses. B.S. Test"

text = replace_abbrev(abbrevs, text)

print(text)

Вот результат.Ничего не случилось.Что случилось?Благодарю.

 Test No. U.S. Mses. B.S. Test

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Вы можете использовать map и operator.methodcaller без необходимости перезаписи, даже если это отличная библиотека.

from operator import methodcaller

' '.join(map(methodcaller('replace', '.', ''), abbrevs))
#No US Mses BS BA DC BTech Pte Mr OEM IRS sq Reg S-K
0 голосов
/ 14 февраля 2019
re_abbrs = [r"\b" + re.escape(a)  for a in abbrs]

Вам нужно использовать это. Нет \b после .. Это дает правильный вывод.

Test No US Mses BS Test

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...