J'utilise pdfminer.six en Python pour extraire de longues données texte. Malheureusement, le Miner ne fonctionne pas toujours très bien, en particulier avec les paragraphes et l'habillage de texte. Par exemple, j'ai la sortie suivante:
"2018Annual ReportInvesting for Growth and Market LeadershipOur CEO will provide you with all further details below." --> "2018 Annual Report Investing for Growth and Market Leadership Our CEO will provide you with all further details below."
Maintenant, je voudrais insérer un espace chaque fois qu'une lettre minuscule est suivie d'une lettre majuscule, puis d'une lettre plus petite (et pour les nombres). Si bien qu'à la fin "2018Annual"
devient "2018 Annual"
et "ReportInvesting"
devient "Report Investing"
, mais "...CEO..."
reste "...CEO..."
.
J'ai seulement trouvé des solutions pour diviser une chaîne en lettres majuscules et https://stackoverflow.com/a/3216204/14635557 mais je n'ai pas pu la réécrire. Malheureusement, je suis totalement nouveau dans le domaine de Python.
3 Réponses :
Nous pouvons essayer d'utiliser re.sub
ici pour une approche regex:
(?<![A-Z\W]) what precedes is a word character EXCEPT for capital letters (?=[A-Z]) and what follows is a capital letter
Cela imprime:
2018 Annual Report Investing for Growth and Market Leadership Our CEO will provide you with all further details below.
Le regex utilisé ici dit d'insérer un espace à tout moment pour lequel:
inp = "2018Annual ReportInvesting for Growth and Market LeadershipOur CEO will provide you with all further details below." inp = re.sub(r'(?<![A-Z\W])(?=[A-Z])', ' ', inp) print(inp)
Essayez de diviser avec regex:
import re temp = re.sub(r"([A-Z][a-z]+)", r"\1", string).split() string = ' '.join(temp)
Je crois que le code ci-dessous donne le résultat requis.
temp = re.sub(r"([a-z])([A-Z])", r"\1 \2", text) temp = re.sub(r"(\d)([A-Za-z])", r"\1 \2", temp)
Je trouve toujours les expressions régulières complexes un peu difficiles, d'où la nécessité de diviser le processus en deux expressions. Peut-être que quelqu'un de meilleur dans les expressions régulières peut améliorer cela pour montrer comment cela peut être réalisé de manière plus élégante.
voir stackoverflow.com/help/how-to-ask
Même si vous êtes nouveau dans le codage Python, vous devriez toujours essayer de coder et publier ce que vous avez essayé avant de demander des solutions
compris, essaiera de l'améliorer la prochaine fois