Проверьте, является ли строка возможным сокращением имени

StackOverflow https://stackoverflow.com/questions/7331462

Вопрос

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

  • fck совпадает с fc kopenhavn, поскольку он соответствует первым символам слова. fhk не соответствует.
  • fco не должен совпадать с fc kopenhavn, потому что никто не будет сокращать FC Kopenhavn как FCO.
  • irl совпадает с in real life.
  • ifk совпадает с ifk goteborg.
  • aik совпадает с allmanna idrottskluben.
  • aid совпадает с allmanna idrottsklubben. Это не настоящая аббревиатура названия команды, но я думаю, ее трудно исключить, если вы не примените специфические знания предметной области о том, как формируются шведские сокращения.
  • manu совпадает с manchester united.

Трудно описать точные правила алгоритма, но я надеюсь, что мои примеры показывают, что мне нужно.

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

Это было полезно?

Решение

Он проходит все тесты, включая несколько созданных мной дополнительных.Он использует рекурсию.Вот правила, которые я использовал:

  • Первая буква аббревиатуры должна соответствовать первой букве текст
  • Остальная часть сокращения (аббревиатура минус первая буква) должна быть сокращением для:

    • остальные слова или
    • оставшийся текст, начиная с любая позиция в первом слове.

родовое слово

Другие советы

Вот способ добиться того, что вы, кажется, хотите сделать

Genracodicetagpre

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

Изменить : Ваше новое обновление немного изменило правила.При использовании "(|.*\s)" вместо ".*" символы в сокращении будут совпадать только в том случае, если они расположены рядом друг с другом или если следующий символ появляется в начале нового слова.

Это позволит правильно сопоставить fck с FC Kopenhavn, но fco - нет. Однако сопоставление aik с allmanna idrottskluben не будет работать, поскольку для этого требуется знание шведского языка, а это не так просто.

Вот новый код с незначительными изменениями

Genracodicetagpre

@Ocaso Protal сказано в комментарии how should you decide that aik is valid, but aid is not valid?, и он прав.

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

Genracodicetagpre

вы должны определить свою логику, вы не можете найти сокращение вслепую.

Ваш алгоритм кажется простым - сокращение - это объединение всех заглавных букв. итак:

Genracodicetagpre

Этого может быть достаточно.

Genracodicetagpre
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top