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']
3 respuestas
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
"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
Yo sugiero:
abbs_ = re.findall(r'\b[A-Z]+s?\b', sent) #abbreviations
hypns_ = re.findall(r'\w+(?:-\w+)*', sent) #hyphenated words