pyspark - различное поведение в консоли python и jupyter-notebook с регулярным выражением - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь воспроизвести результат, используя 're.findall' (re module), который есть в консоли python (v2.7) в jupyter-notebook.До сих пор я знаю, что jupyter-notebook получает кодировку «ascii» по умолчанию, а я даю «utf8».Чтобы «исправить», я использую флаг «re.LOCALE» в «re.findall», что решает проблему «сбой», но не получает символы вроде «ç», «ã» или «ê».Это просто урезание «совпадения».Пример:

Строка типа: "DVD com função karaokê mondial D-14"

Применение функции 're.findall'

# -*- coding: utf-8 -*-
# lots of import here... 
import re

words = "dvd player com função karaokê mondial D-14"
brSpecialChars = r'[\w\dÁáÁàÃãÂâÉéÈèÊêÍíÓóÔÕÚúÜüÇç]'
prepositions = r'(a|ante|apos|após|ate|até|com|contra|de|desde|em|per|para|perante|por|sem|sob|sobre|tras|trás)' 
found = re.findall(r'(' + brSpecialChars + r'+\s+' + prepositions + r'\s+' + brSpecialChars + r'+)'
print "FOUND: {}".format(str(found))

Я получил эту печать в консолииз jupyter-notebook

(u'player com fun ', u'com', u 'fun')

Я получил это с консоли Python

[('player com fun \ xc3 \ xa7 \ xc3 \ xa3o', 'com', 'fun \ xc3 \ xa7 \ xc3 \ xa3o')]

У меня нетИдея почему.Не могли бы вы уточнить это, пожалуйста?

1 Ответ

0 голосов
/ 16 октября 2018

Я нашел обходной путь.Это не само решение, но работает для этого конкретного случая.

Мой предыдущий regex:

found = re.findall(r'(' + brSpecialChars + r'+\s+' + prepositions + r'\s+' + brSpecialChars + r'+)',words,flags=re.LOCALE

Теперь, чтобы обойти любое дерьмо кодирования, я могу сделать это:

found = re.findall(r'([^\s]+\s+' + prepositions + r'\s+[^\s]+',words,flags=re.LOCALE)

Результат:

(вы играете за забаву \ xe7 \ xe3o karaok \ xea ', u'com', u 'karaok \ xea')

Конечно, мне нужно обработать предлоги регулярное выражение таким же образом.Но проблема акцента решена с этим очень уродливым решением!

Если у кого есть идея получше, пожалуйста, напишите здесь!

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