Python offre une multitude de possibilités pour travailler avec des chaînes de caractères (strings). Dans ce billet de blog, nous allons tout d'abord présenter les bases de l'analyse syntaxique de chaînes de caractères Python et préciser la différence entre chaîne de caractères, indexation et séquence de chaînes de caractères.
J'ai déjà utilisé mes connaissances en 2025 pour mettre en œuvre un outil que nous avons appelé Quick Extract. Il aide également les débutants à réaliser une simple API de documents de s'entraîner avec quelques exemples de documents afin d'analyser de nouveaux documents.
Indexation des chaînes de caractères
En Python, un Chaîne une séquence de caractères. Ces caractères sont accessibles par le biais d'un index, qui peut être utilisé à 0 commence. Vous pouvez ainsi accéder au premier, au deuxième et au troisième caractère d'une chaîne de caractères :
text = "Python"
print(text[0]) # Gibt 'P' aus
print(text[1]) # Gibt 'y' aus
print(text[2]) # Gibt 't' ausVous pouvez également utiliser des index négatifs pour accéder aux caractères à partir de la fin de la chaîne de caractères :
print(text[-1]) # Gibt 'n' aus
print(text[-2]) # Gibt 'o' aus
print(text[-3]) # Gibt 'h' ausSéquence de chaînes
Une séquence de chaînes est une partie d'une chaîne de caractères indiquée par un index de début et de fin. En Python, vous pouvez utiliser ce que l'on appelle la syntaxe de découpage pour accéder à des parties d'une chaîne de caractères :
pythonCopy codetext = "Python"
print(text[0:3]) # Gibt 'Pyt' aus
print(text[1:4]) # Gibt 'yth' aus
print(text[:2]) # Gibt 'Py' aus (ohne Anfangsindex entspricht es Index 0)
print(text[3:]) # Gibt 'hon' aus (ohne Endindex entspricht es Index + 1)La syntaxe de découpage fonctionne également avec des indices négatifs :
print(text[-3:-1]) # Gibt 'ho' aus
print(text[:-2]) # Gibt 'Pyth' ausPour résumer les différences entre l'indexation de chaînes et la séquence de chaînes : L'indexation de chaînes se réfère à l'accès à un seul caractère dans une chaîne de caractères, tandis que la séquence de chaînes permet d'accéder à une partie de la chaîne de caractères.
Cas d'utilisation de la méthode Split en Python
Numéros de version et hashs de commit
Dans de nombreuses situations, par exemple lorsque nous travaillons sur des projets logiciels, nous devons souvent extraire des informations de chaînes de caractères combinées. Prenons l'exemple d'une chaîne de caractères qui contient un numéro de version et un hachage de commit : "2.7.0_bf4fda703454". Pour séparer ces informations, nous pouvons utiliser split()-en Python.
version_hash = "2.7.0_bf4fda703454"
version_hash_list = version_hash.split("_")Le résultat est une liste de chaînes de caractères qui se présente comme suit :
['2.7.0', 'bf4fda703454']Ici, la chaîne de caractères est séparée à chaque trait de soulignement. Si vous souhaitez que la séparation se fasse uniquement après le premier trait de soulignement, vous pouvez utiliser la méthode split() avec le paramètre optionnel 1 utiliser :
version_hash.split("_", 1)Si vous êtes sûr que la chaîne de caractères contient un trait de soulignement, vous pouvez même déballer les parties gauche et droite dans des variables séparées :
lhs, rhs = version_hash.split("_", 1)
print(lhs) # Gibt '2.7.0' aus
print(rhs) # Gibt 'bf4fda703454' ausUne alternative à la split()-L'utilisation de la méthode partition(). Son utilisation est similaire à celle de l'exemple précédent, sauf qu'elle renvoie trois composants au lieu de deux. Le principal avantage de cette méthode est qu'elle n'échoue pas si la chaîne de caractères ne contient pas le séparateur.
En général, la split()-est un moyen pratique de diviser et de traiter des informations combinées dans Python. Dans notre exemple, nous avons ainsi pu séparer facilement le numéro de version et le hash de commit.
Analyse syntaxique de chaînes de caractères Python avec expressions régulières (regex)
décomposer du texte en Python à l'aide de groupes de regex nommés et évaluer les avantages et les inconvénients par rapport aux fonctions traditionnelles telles que l'indexation par chaînes de caractères Python, le séquençage ou la méthode split
Si nous avons des chaînes de caractères complexes qui doivent être décomposées en raison de motifs ou d'une ponctuation difficile, les expressions régulières peuvent nous aider à reconnaître et à décomposer ces motifs.
Voici un exemple de code pour l'analyse syntaxique de chaînes avec des groupes de règles nommés en Python :
import re
# Beispieltext
text = "Max Mustermann, Alter: 30 Jahre, Stadt: Berlin"
# Regulärer Ausdruck mit benannten Gruppen
pattern_text = r'(?P<name>[A-Za-zäöüÄÖÜß\s]+),\s+Alter:\s+(?P<age>\d+)\s+Jahre,\s+Stadt:\s+(?P<city>[A-Za-zäöüÄÖÜß\s]+)'
# Kompilieren des regulären Ausdrucks
pattern = re.compile(pattern_text)
# Suche nach Übereinstimmungen im Text
match = pattern.match(text)
# Überprüfen, ob eine Übereinstimmung gefunden wurde
if match:
# Extrahieren der benannten Gruppen
name = match.group('name')
age = match.group('age')
city = match.group('city')
# Ausgabe der extrahierten Informationen
print(f"Name: {name}")
print(f"Alter: {age}")
print(f"Stadt: {city}")
else:
print("Keine Übereinstimmung gefunden.")
Dans cet exemple, nous avons un exemple de texte contenant le nom d'une personne, son âge et sa ville. Nous utilisons une expression régulière avec des groupes nommés pour extraire les informations pertinentes du texte. Les groupes sont nommés comme suit :
name- pour le nom de la personneage- pour l'âge de la personnecity- pour la ville dans laquelle la personne vit
Une fois l'expression régulière compilée, nous recherchons les correspondances dans le texte. Si une correspondance est trouvée, nous extrayons les groupes nommés et affichons les informations extraites.
Avantages
- Flexibilité - Les expressions régulières offrent une grande flexibilité dans l'analyse de texte et peuvent reconnaître des modèles complexes.
- Compact - Les expressions régulières sont souvent plus courtes et plus concises que les méthodes traditionnelles.
- Groupes nommés - Les groupes nommés nous permettent d'identifier et d'extraire facilement des parties du motif.
Inconvénients
- Courbe d'apprentissage - Les expressions régulières ont une courbe d'apprentissage plus raide et sont souvent plus difficiles à lire et à comprendre que les méthodes traditionnelles.
- Application limitée - Les expressions régulières ne sont pas adaptées aux documents profondément imbriqués tels que HTML, XML ou JSON.
Indexation de chaînes de caractères Python, séquençage ou méthode de fractionnement : les fonctions traditionnelles telles que l'indexation de chaînes de caractères Python, le séquençage ou la méthode de fractionnement sont bien adaptées aux tâches d'analyse de texte simples, pour lesquelles la structure de la chaîne de caractères est claire et simple.
Avantages
- Simplicité - Les méthodes traditionnelles sont faciles à comprendre et à mettre en œuvre.
- Lisibilité - Le code est plus facile à lire et à comprendre pour les développeurs qui connaissent Python.
Inconvénients
- Flexibilité limitée - Ces méthodes offrent moins de flexibilité pour l'analyse de modèles de texte complexes.
- Code plus long - Le code peut devenir plus long et plus confus si l'on essaie de reconnaître et de décomposer des modèles complexes.
Automatisation Python Regex
Dans cet exemple, nous montrons comment utiliser le SDK Konfuzio pour automatiser la création de regex. Nous utilisons le SDK pour créer un tokenizer de regex personnalisé pour l'étiquette "ContractDate" à créer. Pour plus d'informations, voir le documentation technique et dans un plus d'articles de blog à trouver.
from konfuzio_sdk.data import Project
from konfuzio_sdk.tokenizer.regex import RegexTokenizer
from konfuzio_sdk.tokenizer.base import ListTokenizer
# Ersetzen Sie YOUR_PROJECT_ID und YOUR_CATEGORY_ID durch die entsprechenden IDs Ihres Projekts und Ihrer Kategorie.
my_project = Project(id_=YOUR_PROJECT_ID)
category = my_project.get_category_by_id(id_=YOUR_CATEGORY_ID)
tokenizer = ListTokenizer(tokenizers=[])
label = my_project.get_label_by_name("ContractDate")
# Finden von Regex-Ausdrücken, die mit Vorkommen des Labels "ContractDate" correspondre
for regex dans label.find_regex(category=category) :
regex_tokenizer = RegexTokenizer(regex=regex)
tokenizer.tokenizers.append(regex_tokenizer)
# Utiliser le tokenizer Regex créé pour créer des annotations pour chaque chaîne correspondante dans un document.
# Remplacer YOUR_DOCUMENT_ID par l'ID correspondant de votre document.
document = my_project.get_document_by_id(YOUR_DOCUMENT_ID)
tokenizer.tokenize(document)Dans cet extrait de code :
- Importons les classes et les fonctions nécessaires depuis le SDK Konfuzio.
- Créons un
Project-en indiquant l'identifiant du projet. - Recevons-nous un
Category-en indiquant l'identifiant de la catégorie. - Créeons un
ListTokenizer. - Recevons-nous le
Label-pour l'étiquette "ContractDate„. - Recherchons les expressions regex qui sont associées à des occurrences de l'étiquette "
ContractDate"dans la catégorie des données d'entraînement. - Ajoutons chaque expression regex trouvée en tant que
RegexTokenizerle siteListTokenizers'ajoutent. - Utilisons le Regex Tokenizer que nous avons créé pour créer des annotations pour chaque chaîne de caractères correspondante dans un document. Pour ce faire, nous indiquons l'identifiant du document et appelons la commande
tokenize()-du Tokenizer.
Une fois le tokenizer créé, vous pouvez l'utiliser pour créer automatiquement des expressions regex pour l'étiquette "ContractDateVous pouvez également trouver des "informations" dans vos documents et créer des annotations pour ces derniers.
