Replace apostrophe in unicode - python

I'm trying to replace an apostrophe in a python unicode string. In the debugger it looks the following:
u'Tu veux aller trop vite! Pour répondre à cette question, tu dois d\\'abord trouver le bon code.'
After the replacement it should have \' instead of \\'.
When I try to replace the apostrophe, nothing happens. What should I do?
The following shows plus/minus the code:
def convert(sheet, file):
from xlrd import open_workbook
from lxml import etree
value = sheet.cell(1, 1).value
#value = u'Tu veux aller trop vite! Pour répondre à cette question, tu dois d\\'abord trouver le bon code.'
child = etree.Element('string', name=key.encode('utf-8'))
child.text = value
file.write(etree.tostring(root, encoding='utf-8', pretty_print=True))

Your literal is invalid, you escaped backslash, but doing so failed to escape single quote ('), thus terminating literal too early. Try those, depending what are you going to achieve:
print u'Tu veux aller trop vite! Pour répondre à cette question, tu dois d\\\'abord trouver le bon code.'
print u"Tu veux aller trop vite! Pour répondre à cette question, tu dois d\\'abord trouver le bon code."
print u'Tu veux aller trop vite! Pour répondre à cette question, tu dois d\'abord trouver le bon code.'
print u"Tu veux aller trop vite! Pour répondre à cette question, tu dois d'abord trouver le bon code."

I'm not sure of what you to achieve here. Do you want to replace the '\\' by '\' in a string variable of your python script? As your literal is invalid, I have done a small change.
Here's an idea to replace your '\\' by '\' using a regexp
# -*- coding: utf-8 -*-
import re
str= u"Tu veux aller trop vite! Pour répondre à cette question, du dois d\\'abord trouver le bon code."
str2=re.sub(r'\\', "", str)
print str
print str2
Output:
Tu veux aller trop vite! Pour répondre à cette question, du dois d\'abord trouver le bon code.
Tu veux aller trop vite! Pour répondre à cette question, du dois d'abord trouver le bon code.

Related

Trying to retrieve element after the last occurence of a special token in python

I insert token at the end of each sentence but they are case when the re is not that token what I would like to do is to retrieve the sentence after the last special token if there exist.
text = ["j’imagine une fourchette entre 40 et 65€ , prix auquel je l’achèterai sans doute.<stop> Au vu de la double fonction (2x25€) , de la technicité et de l’ingéniosité je pense que cela serait un prix très correct .<stop> A voir les matériaux utilisés pour un prix plus précis", "ma seule interrogation est « où seront commercialisées les bobines de fils"]
if "<stop>" in text:
print(text)
x =re.search("/[^<stop>]*$/",text)
print(x)
sentences = text.split("<stop>")
else:
print(text)
sentences = text
sentences = sentences[:-1]
sentences = [s.strip() for s in sentences]
I tried this but does not work. Give me None.
You can remove the re.seach part and append the last part of the split to the array. But note that that you have to loop the initial list.
You can add if s at the end of list comprehension to remove empty entries from the list.
text = [
"j’imagine une fourchette entre 40 et 65€ , prix auquel je l’achèterai sans doute.<stop> Au vu de la double fonction (2x25€) , de la technicité et de l’ingéniosité je pense que cela serait un prix très correct .<stop> A voir les matériaux utilisés pour un prix plus précis",
"ma seule interrogation est « où seront commercialisées les bobines de fils", "<stop>"]
sentences = []
for s in text:
sentences.append(s.split("<stop>")[-1])
sentences = [s.strip() for s in sentences if s]
print(sentences)
Output
['A voir les matériaux utilisés pour un prix plus précis',
'ma seule interrogation est « où seront commercialisées les bobines de fils']

Find exact string in file works weird

I need to find a string in a text file (here a dictionary).
The string found in the file must be exactly the same as the one I am comparing.
Here is my code and the dictionary:
the code
#!/usr/bin/env python3
import os # pour ouvrir le dictionnaire
def check_if_exist(word,dico):
"""retourne vrai si le mot exsite dans le dictionnaire"""
for line in dico:
#line = line.rstrip('\n')
# on ne peut pas utiliser in pour la condition
# car in fait une comparaison partielle, exemple :
# "pal" in "empaler" ; return True
if word.rstrip('\n') == line.rstrip('\n'):
return True
return False
if __name__ == "__main__":
#file_path = "./dico-french.txt"
file_path = "./dico.txt"
# teste si le fichier existe
if(not os.path.isfile(file_path)):
print("le dictionnaire n'existe pas")
exit(1)
#ouvre le dictionnaire
dico = open(file_path,'r')
print("q pour quitter le jeu.")
mot = input("Premier joueur, quel est votre mot ? ")
# tant que le mot n'existe pas
while(not check_if_exist(mot,dico)):
mot = input("Un autre ? ")
# le mot existe, on passe au joueur suivant
tab = []
tab.append(mot)
mot_old = mot
while mot!='q':
print("\nles mots sont ",tab)
mot = input("Joueur suivant, quel est votre mot ? ")
while(not check_if_exist(mot,dico)):
mot = input("Un autre bis ? ")
tab.append(mot)
mot_old = mot
print("Bye.")
the dict
pal
lape
pale
palie
pallier
pallies
Let me explain you the problem with these examples :
for the fig n°1, the conditions seems to be met, all the words are in the dictionary.
fig n°1:
q pour quitter le jeu.
Premier joueur, quel est votre mot ? pal
les mots sont ['pal']
Joueur suivant, quel est votre mot ? pale
les mots sont ['pal', 'pale']
Joueur suivant, quel est votre mot ? palie
les mots sont ['pal', 'pale', 'palie']
Joueur suivant, quel est votre mot ? ^C
for the fig n°2, all the word are in the dictionary, but when I enter a word positioned after the one I am comparing in the dictionary, it does not find it
fig n°2:
q pour quitter le jeu.
Premier joueur, quel est votre mot ? palie
les mots sont ['palie']
Joueur suivant, quel est votre mot ? pal
Un autre bis ? ^C
There is some kind of index that doesn't reset while I leave the function.
On the fig n°3 I try with a word not in the dictionary, this unknown word is not found, so it ask me for another word, and when I enter a known-word it doesn't work.
fig n°3:
q pour quitter le jeu.
Premier joueur, quel est votre mot ? pal
les mots sont ['pal']
Joueur suivant, quel est votre mot ? hgjfdkjhgfj
Un autre bis ? pale
Un autre bis ? ^C
Can someone explain this to me?
EDIT:
Thanks to 'Nir H.', just have to add dico.seek(0) at the beginning of my function

How to count the number of line in a tsv file which end with a specific string?

I have a tsv file with two columns seperate by tabulation. The first column is the colum of sentences and the second the column of label I want to count the number of sentences which are positive, negative or neutral in the file sa I read it and loop inside it. I come up with this small code but It does not work ? How can I improve it ?
tsv = ['jdmfreins', 'jdmconditions', 'jdmne', 'jdmmotivations']
for s in tsv:
c_pos = 0
c_neu = 0
c_neg = 0
path = os.path.join(fileDir, '/mnt/c/Users/Emmanuelle/Documents/Extraction_corpus/fichier_sorti_tsv', s + '.tsv')
with open(path, 'r', encoding='utf-8') as l_1:
next(l_1)
print(s, '\n ')
l_1 = [line.rstrip() for line in l_1]
for line in l_1:
print(line)
if line.strip().endswith('positif'):
c_pos =+ 1
elif line.strip().endswith('neutre'):
c_neu =+ 1
else:
c_neg =+ 1
print('nombre positif :', c_pos)
print('nombre négatif :', c_neg)
print('nombre neutre :', c_neu, '\n')
The file look like this :
"""""""J'avais adoré les deux premières, mais celui-ci n'est pas du tout à la hauteur.""" positif
Peter Criss et Ace Frehley trouvent davantage leur place dans le travail de composition et au chant (Hooligan / Shock Me) face à l'omniprésence de la paire Stanley/Simmons mais les tensions internes existent et conduiront aux 4 albums solos de 1978... positif
Le contexte est certes bien rendu, mais les rapports entre les héros sont exécrables. positif
Le sujet aurait pu faire un bon vaudeville avec un tant soit peu d'humour et de finesse, mais, la plus belle femme du monde ne peut donner que ce qu'elle a !!! positif
arnold est mauvais, il fait des blagues pas marrantes le mechant est simplement le meme que dans le 2 mais en plus balezes, nick stahl est mauvais : pour finir c'est pitoyable de voir ce que peut faire hollywood pour du fric! neutre
Oui mais... Excusez moi mais même si les sketch me font rire séparément, essayer de tous les avaler en une soirée, c'est comme essayer de manger des kilos de foie gras en un repas. neutre
Au risque de ne pas brosser la majorité dans le sens du poil, je vais donner un avis honnête, qui n'engage que moi mais qui est tellement différent de ceux que j'avais pu lire qu'il peut être utile à certains. positif
(oubliez les compils recentes qui n'ont de compils que le nom,mais n'ont pas oublié au passage le coté biseness négatif
Début long avant d'etre pris par un peu de suspens devant un personnage que l'on pense interessant ( psychothérapeute tueur !)mais elle nous amène vers d'autres personnages s'étendant sur leur séjour, leur rencontre que l'on s'imagine utile pour la fin mais il n'en est rien!! neutre
La charge est un peu cruelle, mais l’unicité du style des DA de Miyasaki finit par me lasser. positif
Bon et bien le premier n'était déjas pas une révélation du cinéma mais là on frise le délit d'abut de confience. positif
Peut être suis-je excessif dans mes propos, mais je crois qu'ils sont à la mesure de ma déception. positif
"""presque cristalline chante pour 2 minutes de Bonheur auditif après tant de déception: Pourquoi ne se lancerait elle pas plutôt dans l'opéra et le répertoire classique revisité???ses nouvelles fréquentations lui font probablement du bien au cœur mais feraient mieux de changer de métier et arrêter de pervertir son talent si mal exploité""""""" neutre
and the answer :
nombre positif : 0
nombre négatif : 0
nombre neutre : 1
I tried also : if line.split('\t') == 'positif': but same answer
You can use Counter from the collections module:
from collections import Counter
with open('file.txt','r') as f:
lines = f.read().splitlines()
count = Counter([l.split()[-1] for l in lines])
print(count)
Output:
Counter({'positif': 8, 'neutre': 4, 'négatif': 1})
If you want the results in a dictionary:
print(dict(count))
Output:
{'positif': 8, 'neutre': 4, 'négatif': 1}
Breaking it down. This part:
with open('file.txt','r') as f:
lines = f.read().splitlines()
will assign all the lines in file.txt to a list called lines. The newlines have already been taken care of by the read().splitlines(). This part:
[l.split()[-1] for l in lines]
is a list comprehension that will list all the last words from the lines in lines, where str.split() will return a list of strings that have been separated by a space, and [-1] means the last element of the list.

How to change set into list and sort by the key with alphabetically ordered values in a dictionary?

I'm having a particular problem with my code (see below). Mainly, I want my function to return dictionary such that keys are in the ascending order and corresponding values are in the alphabetical order and I want values with the same key to be retired as a list: [{key1: [value1, value2, etc.], key2: [value1, value2, etc.], etc.}, ...], where key1 < key2 < key3 < ...
With my code I am getting:
[(1, {'s', 'c', 'n', 'à', 'd', 'a', 'l'}), (2, {'et', 'si', 'se', 'là', 'la', 'un', 'il', 'le', 'en', 'du', 'de', 'sa', 'ce'}), (3, {'ses', 'qui', 'ils', etc.} ...]
Could someone help me to modify my code?
def words_by_length(fileName):
dict_wl = {}
with open(fileName, 'r') as f:
for line in f:
tmp_str = line.lower().replace("?", " ").replace("'", " ").replace(".", " ").replace(",", " ")\
.replace("-", " ").split()
for word in tmp_str:
words = len(word)
if word.isalpha() and words in dict_wl:
dict_wl[words].add(word)
else:
dict_wl[words] = {word}
# print(dict_wl)
s_dict_wl = sorted(dict_wl.items())
return s_dict_wl
I'm using the following text (which I have saved as file) to test the code:
Et, sous ses pieds, les coups profonds, les coups obstinés des rivelaines continuaient. Les camarades étaient tous là, il les entendait le suivre à chaque enjambée. N'était-ce pas la Maheude, sous cette pièce de betteraves, l'échine cassée, dont le souffle montait si rauque, accompagné par le ronflement du ventilateur ? A gauche, à droite, plus loin, il croyait en reconnaître d'autres, sous les blés, les haies vives, les jeunes arbres. Maintenant, en plein ciel, le soleil d'avril rayonnait dans sa gloire, échauffant la terre qui enfantait. Du flanc nourricier jaillissait la vie, les bourgeons crevaient en feuilles vertes, les champs tressaillaient de la poussée des herbes. De toutes parts, des graines se gonflaient, s'allongeaient, gerçaient la plaine, travaillées d'un besoin de chaleur et de lumière. Un débordement de sève coulait avec des voix chuchotantes, le bruit des germes s'épandait en un grand baiser. Encore, encore, de plus en plus distinctement, comme s'ils se fussent rapprochés du sol, les camarades tapaient. Aux rayons enflammés de l'astre, par cette matinée de jeunesse, c'était de cette rumeur que la campagne était grosse. Des hommes poussaient, une armée noire, vengeresse, qui germait lentement dans les sillons, grandissant pour les récoltes du siècle futur, et dont la germination allait faire bientôt éclater la terre.
You were not far...
Once items() is sorted, you just have to convert that back to a dict and sort the values:
...
# print(dict_wl)
s_dict_w1 = {k: sorted(v) for k,v in sorted(dict_w1.items())}
return s_dict_wl

python ascii to unicode conversion

i have a file with data like this:
\r\n\tSoci\u00e9t\u00e9 implant\u00e9 dans l'internet recrute des t\u00e9l\u00e9conseillers en b to b pour effectuer de la prise de rendez-vous qualifi\u00e9 pour de la conception de site internet et du r\u00e9f\u00e9rencement google.
how can i print it as unicode, like this:
Société implanté dans l'internet recrute des téléconseillers en b to b pour effectuer de la prise de rendez-vous qualifié pour de la conception de site internet et du référencement google.
i know i have to use some unicode function but what?
That looks like a python unicode string literal; decode this from unicode_escape.
Demo:
>>> data = "\r\n\tSoci\u00e9t\u00e9 implant\u00e9 dans l'internet recrute des t\u00e9l\u00e9conseillers en b to b pour effectuer de la prise de rendez-vous qualifi\u00e9 pour de la conception de site internet et du r\u00e9f\u00e9rencement google."
>>> data.decode('unicode_escape')
u"\r\n\tSoci\xe9t\xe9 implant\xe9 dans l'internet recrute des t\xe9l\xe9conseillers en b to b pour effectuer de la prise de rendez-vous qualifi\xe9 pour de la conception de site internet et du r\xe9f\xe9rencement google."
>>> print data.decode('unicode_escape')
Société implanté dans l'internet recrute des téléconseillers en b to b pour effectuer de la prise de rendez-vous qualifié pour de la conception de site internet et du référencement google.
You can either decode the data as you read it from the file (using a binary mode), or you can use io.open() in Python 2, or regular open() in Python 3 to have data decoded on the fly:
from io import open
with open(filename, 'r', encoding="unicode_escape") as inputfile:
for line in inputfile:
print(inputfile)
Note that JSON strings use the same escape syntax; \uhhhh denotes a Unicode codepoint using just ASCII characters.

Categories

Resources