Аббревиатуры и текст без пробелов как разбить - PullRequest
0 голосов
/ 18 июня 2020

У меня есть список пар "ключ-значение".

lst = [
  ('AAI', 'AirportAuthorityofIndia'),
  ('AAO', 'AssistantAccountsOfficer'),
  ('AB', 'AutonomousBodies'),
  ('ABA', 'AntiBoostMissile'),
  ('ABC', 'AuditBureauofCirculation'),
  ('ABM', 'AntiBallisticMissile'),
  ('ABVP', 'AkhilBharatiyaVidyarthiParishad'),
  ('AC', 'AssistantCollector'),
  ('AC', 'AirConditioner'),
  ('ACL', 'AccessControlList'),
  ('ACT', 'AssociationofComputerTechnology')]

Я пытаюсь добавить пробелы между словами в значениях. Например:

Мне нужно разделить:

('AAI', 'AirportAuthorityofIndia') на ('AAI', 'Airport Authority of India')

('ACT', 'AssociationofComputerTechnology') на ('ACT', 'Association of Computer Technology')

Если это только капитал буквы Я могу сделать это с помощью регулярного выражения

[(abbr, re.sub(r'([a-z])(?=[A-Z])', r'\1 ', long)) for abbr, long in lst]

и получаю

[('AAI', 'Airport Authorityof India')....etc

Как добавить пробел между строчными буквами?

Или есть любой другой метод, который я могу использовать для этого?

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Решение, хотя и далекое от идеального.

  • Без сокращений.
  • На основании этого ТАК ответьте здесь используя его infer_spaces(s) функцию
    • Он использует файл словаря words-by-frequency.txt

В вашем случае вы должны включить исконно индийские слова , например Akhil, Bharatiya, Vidyarthi, Parishad, и расширьте его до в свой файл словаря , чтобы сделать его полностью универсальным c. Вот как я это сделал ниже.

    lst = [
      ('AAI', 'AirportAuthorityofIndia'),
      ('AAO', 'AssistantAccountsOfficer'),
       ...
    ]

    for (abbr, long) in lst:
        print(infer_spaces(long.lower()).title())

Вывод:

Airport Authority Of India
Assistant Accounts Officer
Autonomous Bodies
Anti Boost Missile
Audit Bureau Of Circulation
Anti Ballistic Missile
Akhil Bharatiya Vidyarthi Parishad
Assistant Collector
Air Conditioner
Access Control List
Association Of Computer Technology
0 голосов
/ 19 июня 2020

Я делаю код, как показано ниже. Надеюсь, это поможет вам ...

[AZ] {1} - Заглавная буква встречается только один раз, за ​​которой следует одна или несколько строчных букв [az] +

lst = [
('AAI', 'AirportAuthorityofIndia'),
('AAO', 'AssistantAccountsOfficer'),
('AB', 'AutonomousBodies'),
('ABA', 'AntiBoostMissile'),
('ABC', 'AuditBureauofCirculation'),
('ABM', 'AntiBallisticMissile'),
('ABVP', 'AkhilBharatiyaVidyarthiParishad'),
('AC', 'AssistantCollector'),
('AC', 'AirConditioner'),
('ACL', 'AccessControlList'),
('ACT', 'AssociationofComputerTechnology')]
for item in lst:
    result = re.findall(r'[A-Z]{1}[a-z]+', item[1]) 
    print(item[0],","," ".join(result))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...