0
votes

Regex avec plusieurs crochets carrés

Je travaille avec des transcriptions et j'ai eu du mal à la normalisation. Certains d'entre eux ont des supports carrés au sein d'autres supports carrés pour spécifier les différents événements de bruits / sonores pouvant être trouvés lors de l'écoute du fichier audio correspondant. Ceci est un exemple de la ligne d'un fichier: xxx pré>

dans chaque ligne, le format correspond à p> xxx pré>

ma sortie idéale serait: p>

  1. Obtenez le texte qui n'est pas conçu par des crochets carrés: E.g: "C'est gênant EH" Li>
  2. extraire le texte à l'intérieur des crochets uniquement si ":" est trouvé. Le texte à attraper serait celui après le côlon. E.g: Ouais, vous pouvez vous lire li> ol>

    La sortie doit ressembler à quelque chose de similaire à celui-ci: p> xxx pré>

    J'ai essayé de résoudre ce problème à l'aide de SED, mais cela ne me dérangerait pas d'essayer Perl ou tout autre outil de traitement de texte. Ma tentative la plus proche jusqu'à présent est la suivante: p>

    sed 's/\[[^]]*]//g'
    


3 commentaires

Le niveau maximum des crochets imbriqués 2? Je veux dire, c'est littéralement des crochets dans d'autres crochets , ou peut-il être Supports carrés à d'autres supports carrés au sein d'autres crochets ... ? De votre part, il semble que la réponse est que le niveau de nidification est au plus 2.


Le problème général de la nidification arbitraire ne peut être traité dans Regex. Si vous n'avez besoin que de deux niveaux de nidification, cela pourrait probablement être fait, mais vous auriez besoin d'un catalogue des annotations qui ne font pas partie de la boîte de dialogue. Nous pouvons faire une regex pour supprimer [rire] et [bruit] etc. mais probablement il y en a plus d'entre eux dans le matériau. Et / ou spécifier une règle, comme un seul jeton alphabétique + des traitements de soulignement entre crochets peut être supprimé, tandis que d'autres supports carrés doivent être supprimés seuls S / \ [[[[] \ + \ \ | |] // g


Merci à tous pour votre aide. Après avoir vérifié les transcriptions, j'ai remarqué que certaines lignes ne disposent que d'une paire de crochets et d'autres qui en ont deux, comme l'exemple (et c'est bien le niveau maximum de supports imbriqués


3 Réponses :


2
votes

Basé sur votre exemple, quelque chose comme xxx

ceci peut être facilement exprimé dans sed aussi, mais les variations de regex diffèrent entre les dialectes. Si vous avez sed -e ou sed -r , vous pouvez probablement utiliser cette regex Verbatim.


1 commentaires

Génial, je prenais un tour totalement mauvais, et c'était si facile à la place. Cependant, vous devez inclure / quelque part, comme la dernière pièce à supprimer est [bruit_bkgspeech /] .



0
votes

Vous pouvez utiliser cette commande si votre fichier est nommé audio : xxx

ceci m'a donné sur votre exemple:

U012_w038 Ouais vous pouvez lire demain vous enregistrez-vous maintenant ceci est gênant EH

étape par étape Cette commande fait:

  • SED 's / \ [\ ([^]] *: \) // g' : supprime tout entre [ et et : inclus

  • s / \ [[[[^]] *] // g ': supprime tout entre [ et ] inclus.

  • SED '// g' : supprime le reste ]

  • SED 'S / * / / G' : Supprime toutes les ébauches consécutives.


2 commentaires

sed est une langue de script; Vous pouvez combiner toutes ces commandes dans un script unique au lieu de quatre processus distincts.


Vous avez absolument raison, j'ai corrigé ma réponse en conséquence à votre commentaire.



1
votes

Cette version xxx

détecte les supports non appariés.


1 commentaires

Compte tenu de l'OP, des supports non appariés signifient probablement mal-formé.