Para comenzar, necesito identificar todas las abreviaturas y palabras con guiones en mis oraciones. Deben imprimirse a medida que se identifican. Mi código no parece funcionar bien para esta identificación.

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_)

Una de las oraciones en mi corpus es: DevOps con API y arquitectura basada en eventos usando el entorno de Cloud Data Analytics BI de autoservicio

La salida para esto es:

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']

La salida esperada es:

new sentence:
DevOps with APIs & event-driven architecture using cloud Data Analytics environment Self-service BI
['APIs','BI']
['event-driven','Self-service']
1
Shraddha Avasthy 1 oct. 2019 a las 08:38

3 respuestas

La mejor respuesta

Su regla para abreviaturas no coincide. Desea encontrar cualquier palabra con más de 1 letra mayúscula consecutiva, una regla que podría usar sería:

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

Esto coincidiría con API y 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_)

Salida:

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

Esto probablemente no encontrará todas las abreviaturas como

t = "Prof. Dr. S. Quakernack"

Por lo que es posible que deba modificarlo con algunos datos más y, por ejemplo, http://www.regex101.com

1
Patrick Artner 1 oct. 2019 a las 05:56

"Como sabes, obtuve todos los As en mi curso".

¿Es "As" una abreviatura? Si no es así, debe descartar letras mayúsculas simples seguidas o no por Ss, y solo reunir al menos pares , opcionalmente seguido por uno como en API . Entonces,

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

Los \ b son necesarios para asegurarse de que no coseche cosas como ImNotAGirl debido a ese par AG en el medio.

Luego debe obtener abreviaturas: una palabra (\ w +), seguida de al menos una secuencia de guiones:

hypns_= re.findall(r'\b(?:\\w+(-\w+)+)\b', sent) #hyphenated words
1
LSerni 1 oct. 2019 a las 06:00

Yo sugiero:

abbs_ = re.findall(r'\b[A-Z]+s?\b', sent) #abbreviations
hypns_ = re.findall(r'\w+(?:-\w+)*', sent) #hyphenated words
1
Gary Goh 1 oct. 2019 a las 05:48
58178639