Печать сокращений и переносимых слов - PullRequest
1 голос
/ 01 октября 2019

Мне нужно идентифицировать все сокращения и переносы слов в моих предложениях, чтобы начать. Они должны быть напечатаны по мере их идентификации. Мой код, кажется, не работает должным образом для этой идентификации.

import re

sentence_stream2=df1['Open End Text']
for sent in sentence_stream2:
    abbs_ = re.findall(r'(?:[A-Z]\.)+', sent) #abbreviations
    hypns_= re.findall(r'\w+(?:-\w+)*', sent) #hyphenated words

    print("new sentence:")
    print(sent)
    print(abbs_)
    print(hypns_)

Одно из предложений в моем корпусе: DevOps с API-интерфейсами и управляемой событиями архитектурой с использованием облачной среды Data Analytics Self-service BI

Вывод для этого:

new sentence:
DevOps with APIs & event-driven architecture using cloud Data Analytics environment Self-service BI
[]
['DevOps', 'with', 'APIs', 'event-driven', 'architecture', 'using', 'cloud', 'Data', 'Analytics', 'environment', 'Self-service', 'BI']

ожидаемый вывод:

new sentence:
DevOps with APIs & event-driven architecture using cloud Data Analytics environment Self-service BI
['APIs','BI']
['event-driven','Self-service']

Ответы [ 3 ]

1 голос
/ 01 октября 2019

Я предлагаю:

abbs_ = re.findall(r'\b[A-Z]+s?\b', sent) #abbreviations
hypns_ = re.findall(r'\w+(?:-\w+)*', sent) #hyphenated words
1 голос
/ 01 октября 2019

«Как вы знаете, я получил все как в моем курсе».

Является ли «как» аббревиатура? Если нет, то вам нужно отбросить одиночные заглавные буквы, за которыми следуют или нет Ss, и собрать не менее пар , за которыми, возможно, следует одна s, как в API . Итак,

abbs_ = re.findall(r'\b(?:[A-Z][A-Z]+s?)\b', sent) #abbreviations

Необходимо, чтобы \ b был уверен, что вы также не пожнете такие вещи, как ImNotAGirl, из-за этой пары AG в середине.

Затем вы должны получить сокращения: слово (\ w +), за которым следует хотя бы одна последовательность слов дефиса:

hypns_= re.findall(r'\b(?:\\w+(-\w+)+)\b', sent) #hyphenated words
1 голос
/ 01 октября 2019

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

abbs_ = re.findall(r'(?:[A-Z]{2,}s?\.?)', sent) #abbreviations

Это будет соответствовать API и BI.

t = "DevOps with APIs & event-driven architecture using cloud Data Analytics environment Self-service BI"

import re

abbs_ = re.findall(r'(?:[A-Z]\.)+', t) #abbreviations
cap_ = re.findall(r'(?:[A-Z]{2,}s?\.?)', t) #abbreviations
hypns_= re.findall(r'\w+-\w+', t) #hyphenated words fixed

print("new sentence:")
print(t)
print(abbs_)
print(cap_)
print(hypns_)

Вывод:

DevOps with APIs & event-driven architecture using cloud Data Analytics environment Self-service BI
[]  # your abbreviation rule - does not find any capital letter followed by .
['APIs', 'BI'] # cap_ rule
['event-driven', 'Self-service']  # fixed hyphen rule

Скорее всего, здесь не найдутся все сокращения, такие как

t = "Prof. Dr. S. Quakernack"

, поэтому вам может потребоваться настроить его, используя дополнительные данные иFe http://www.regex101.com

...