Идеи для преобразования прямых кавычек к изогнутым кавычкам

Я дам вам пару советов:

Во-первых, большую часть времени у вас нет (и вы не хотите связываться с инициализатором формы) [1113 ]

Вместо инициализации значений ваших paymentoption вариантов в форме __init__ лучше создать CustomMultipleChoiceFiled для этого вопроса.

Например:

class PaymentOptions(MultipleChoiceField):

    def __init__(self, choices=None, **kwargs):
        super(PaymentOptions, self).__init__(choices=choices, **kwargs)
        if choices is None:
            self.choices = # ...

, тогда вы можете использовать его, не возиться с формой __init__.

Во-вторых, не переопределяйте clean, если в этом нет крайней необходимости , вы можете добавить метод с именем clean_paymentoption и выполнить там всю необходимую проверку.

Вы можете прочитать об этом в документации:

Метод clean_<fieldname>() вызывается на подклассе формы - где <fieldname> [ 1127] заменяется именем атрибута поля формы. Этот метод выполняет любую очистку, специфичную для этого конкретного атрибута, независимо от типа поля, которым он является. Этот метод не передал никаких параметров. Вам нужно будет найти значение поля в self.cleaned_data и помнить, что на данном этапе это будет объект Python, а не исходная строка, представленная в форме (это будет в cleaned_data, потому что метод field (clean) общего поля Выше уже очищал данные один раз).

Например, если вы хотите проверить, что содержимое CharField с именем serialnumber является уникальным, clean_serialnumber () будет правильным местом для этого. Вам не нужно определенное поле (это просто CharField), но вам нужна часть проверки для конкретного поля формы и, возможно, очистка / нормализация данных.

Возвращаемое значение этого метода заменяет существующее значение в cleaned_data, поэтому оно должно быть значением поля из cleaned_data (даже если этот метод не изменил его) или новым очищенным значением.

В вашем случае это может быть:

def clean_paymentoption(self):
    paymentoption = self.cleaned_data.get('paymentoption', None)
    if paymethod1 == 3 and len(paymentoption) == 0:            
        self.add_error('paymentoption', 'You must select at lease one Offline Payment Option if users must pay in person or over the phone.')

И снова вы избегаете другого вызова super, и вызовы super - это хорошая вещь, которую следует избегать, когда вы начинаете получать ошибки трудно отслеживать, как это вы только что опубликовали здесь.

13
задан ShreevatsaR 4 February 2009 в 13:21
поделиться

8 ответов

угадайте который изогнутый символ кавычки использовать, если это возможно,

Это не в общем случае.

Простой алгоритм, что большая часть автоматического использования преобразователей должна только посмотреть на предыдущую букву, которую Вы ввели перед 'или ". Если это - пространство, запустите строки, открывающей скобки или другой вводной кавычки, выберите вводную кавычку, еще закрывшись. Преимущество этого метода состоит в том, что он может выполнить as-you-type, поэтому когда он выбирает неправильный, можно обычно исправлять его.

мы хотим оставить апострофы в покое

Я соглашаюсь! Но не многие люди делают. Это - нормальная наборная практика для превращения апострофа в одинарную кавычку лево-направления. Лично я предпочитаю оставлять их, как они, для различения их от включения кавычек, делая текст легче (я нахожу) читать, и возможный обработать автоматически.

Однако это действительно - просто мой вкус и обычно не считается выровненным по ширине просто, потому что символ определяется стандартом Unicode, как являющимся АПОСТРОФОМ.

'это возможные апострофы в начале слов

Действительно. Нет никакого способа сказать апостроф от потенциальной открытой кавычки в случаях как классическая Рыба 'n' Микросхемы, за исключением огромных сумм культурного контекста.

(Не говоря уже о началах, okinas, глоттальных остановках и различном другом использовании апострофа...)

Лучшей вещью сделать, конечно, является установка раскладка клавиатуры, которая может ввести умные кавычки непосредственно. Я имею ‘’ на AltGr + [], “” на AltGr+Shift + [], – — на AltGr + [Сдвиг] +dash, и так далее.

2
ответ дан 2 December 2019 в 01:11
поделиться

Хорошее место для запуска было бы с конечным автоматом:

  • При запуске в положении 0 выполните итерации по символам
  • После нахождения кавычки введите "Заключенное в кавычки" состояние (открытая кавычка)
  • В "Заключенном в кавычки" состоянии и при обнаружении с кавычкой возвратитесь к "Стартовому" состоянию (закрывающий кавычку)

Можно принять дополнительные решения в каждом из изменений состояния.

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

Мои 0,02$

3
ответ дан 2 December 2019 в 01:11
поделиться

Похоже, что Ваше первое сообщение покрывает большинство идей, которые я собирался записать здесь, это - то, что я оставил...

Для примера апострофа ("Мне нравится 'То шоу 70-х'", сказала она), маловероятно, что кавычки будут вложены непосредственно в кавычках того же типа. Вы могли использовать в своих интересах это.

Лучший способ сделать это, по-моему, должно заставить код только обработать однозначные случаи (двойные кавычки довольно просты). Для тех с несколькими возможными вариантами сохраните их положение в списке и исследуйте его, когда оно будет закончено. Вы могли бы найти еще несколько легко кодированных случаев там, или Вы могли бы просто решить зафиксировать их вручную.

2
ответ дан 2 December 2019 в 01:11
поделиться
  1. Основная вещь состоит в том, чтобы всегда пытаться найти соответствие парам. Учитывая, что каждая кавычка имеет кавычку соответствия, Вы могли заставить свою программу попросить Вашу справку только там, где это не уверено, который является кавычкой соответствия.

  2. Вводные кавычки всегда при открытии строки или имеют пространство перед ними. Закрытие кавычек всегда пространство после них. При нахождении двоеточия со следующей кавычкой, это - вероятно, заключительная кавычка.

  3. Если буква после кавычки является верхним регистром, это - вероятно, вводная кавычка.

  4. Если существует знак пунктуации перед кавычкой, это - вероятно, заключительная кавычка.

  5. Попытайтесь сделать это многократно. Программа должна попросить у Вас сначала всех кавычек, которые она может определенно присвоить функции. (Только для проверки это не совершило ошибок.)

  6. Во втором раунде что-то как все кавычки, что неясно, открывают ли они кавычки или апострофы. Для всех вводных кавычек это должно найти автоматически заключительную кавычку.

Другой, возможно, менее сложный, идея мог быть:

  1. Найдите все некавычки, спросив пользователя о каждом, который мог потенциально быть кавычкой или некавычкой.

  2. Все остающиеся кавычки должно быть довольно легко преобразовать. Вводные кавычки имеют пробелы или новую строку перед ними и закрывающийся после них.

Одна последняя часть мысли:

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

1
ответ дан 2 December 2019 в 01:11
поделиться

Я очень не хочу сказать это, но лучший план действий мог бы быть должен изучить то, что Word делает и копирует его. Даже если это неправильно в некоторых случаях, это представляет стандарт, к которому привыкли многие люди. Одно поведение для эмуляции имеет отмену (Ctrl-Z), сразу возвращаются к прямой кавычке после замены кривым.

1
ответ дан 2 December 2019 в 01:11
поделиться

Вот регулярное выражение, которое могло бы помочь для двойных кавычек:

/([^\s\(]?)"(\s*)([^\\]*?(\\.[^\\]*)*)(\s*)("|\n\n)([^\s\)\.\,;]?)/gms

Это перезапустит в каждом абзаце, и это определит пар кавычек (и также позволит Вам проверять, что интервал корректен прежде и после кавычек, если это полезно).

Numbered element    identification  
  1               non-white-space before quote quote  
  2               white-space after leading quote  
  5               white-space before trailing quote  
  6               trailing quote (or double-newline, i.e. start of a paragraph  
  7               character after trailing quote if not whitespace or right   paren                     

Я думаю, что было бы разумно расширить это для Ваших других случаев (у меня просто еще не было потребности к.)

Это - синтаксис JavaScript. Это довольно быстро, но я не сделал большего количества оптимизации, чем мое "достаточно хорошее". Это сделает, скажем, 400 страниц регистрируют приблизительно секунду. Я думаю, что было бы трудно соответствовать своей скорости процедурно.

1
ответ дан 2 December 2019 в 01:11
поделиться

Компьютерная лингвистика кто-либо?

Кто-то упомянул, было ли у Вас огромное количество культурного контекста, это могло бы быть выполнимо. Так излишество, но самое точное автоматическое решение проблемы поверхностный синтаксический анализ. Это требует корпуса любого языка и режима, Вы имеете дело с (например, Брауновский корпус для общего английского языка).

Разработайте классификатор для изогнутых кавычек на основе синтаксического контекста изогнутых кавычек, происходящих в корпусе. Наконец, дайте свой произвольный синтаксический контекст с прямой кавычкой к Вашему классификатору, и выталкивает самый вероятный символ кавычки!

1
ответ дан 2 December 2019 в 01:11
поделиться

["Мне нравится 'То шоу 70-х'", сказала она]

Я первоначально думал, возможно, с помощью нескольких, передает по тексту для получения понимания контекста, мог бы помочь, но это не решит все экземпляры.

Лучшая вещь, которую Вы могли сделать, увеличена, список возможных наборов/выражений слова как она был, 'это', 70-е и т.д., и бросьте их в словарь с автоисправлением на них для преобразования дорожек в завихрения и наоборот. Проверяет правописание работает на каждом слове, так или иначе не делают их? (извините, который не помогает Вашей emacs проблеме),

OO игнорирует одинарную кавычку, изгибающую все вместе от того, что я могу сказать.

Википедия имеет немного информации об этих противных вещах.

0
ответ дан 2 December 2019 в 01:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: