Создание аббревиатуры - выбор первого символа незапорных слов - PullRequest
0 голосов
/ 20 декабря 2018

Учитывая список стоп-слов и фрейм данных с 1 столбцом, имеющим полные формы, как показано -

stopwords = ['of', 'and', '&', 'com', 'org']
df = pd.DataFrame({'Full form': ['World health organization', 'Intellectual property', 'royal bank of canada']})
df

+---+---------------------------+
|   |         Full form         |
+---+---------------------------+
| 0 | World health organization |
| 1 | Intellectual property     |
| 2 | Royal bank of canada      |
+---+---------------------------+

Я ищу способ привести соседний столбец с их сокращением, игнорируя стоп-слова (если есть).

Ожидаемый результат:

+---+---------------------------+----------------+
|   |         Full form         |   Abbreviation |
+---+---------------------------+----------------+
| 0 | World health organization |   WHO          |
| 1 | Intellectual property     |   IP           |
| 2 | Royal bank of canada      |   RBC          |
+---+---------------------------+----------------+

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Другой подход:

df['Abbreviation'] = (df['Full form'].replace(stopwords, '', regex=True)
                      .str.split()
                      .apply(lambda word: [l[0].upper() for l in word])
                      .str.join(''))
0 голосов
/ 28 декабря 2018

Вот решение для регулярных выражений:

stopwods = ['of', 'and', '&', 'com', 'org']
stopwords_re = r"(?!" + r"\b|".join(stopwords) + r"\b)"
abbv_re = r"\b{}\w".format(stopwords_re)

def abbrv(s):
    return "".join(re.findall(abbv_re, s)).upper()

[out]:

>>> abbrv('royal bank of scotland')
'RBS'

Для использования с пандами:

df['Abbreviation'] = df['Full form'].apply(abbrv)

Для полного объяснениярегулярного выражения см .: https://regex101.com/r/3Q0XXF/1

Вкратце,

  • \b{}\w: Найти все символы после границы слова
  • (?!of\b|and\b|&\b):если только он не находится в списке стоп-слов
0 голосов
/ 20 декабря 2018

Это должно сделать это:

import pandas as pd

stopwords = ['of', 'and', '&', 'com', 'org']
df = pd.DataFrame({'Full form': ['World health organization', 'Intellectual property', 'royal bank of canada']})


def abbrev(t, stopwords=stopwords):
    return ''.join(u[0] for u in t.split() if u not in stopwords).upper()


df['Abbreviation'] = df['Full form'].apply(abbrev)

print(df)

Вывод

                   Full form Abbreviation
0  World health organization          WHO
1      Intellectual property           IP
2       royal bank of canada          RBC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...