Match everything until certain pattern [closed] - python

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 7 years ago.
Improve this question
So I have this piece of text..
200 g torskefilet
havsalt og friskkværnet peber
8 tynde skiver røget spæk
150 g rødbede (ca. 2 stk.)
½ dl blommeeddike
1 spsk. olivenolie
1 spsk. rørsukker
lidt rødbedeblade eller anden bitter salat
Vask rødbederne, kom dem i en gryde med vand, og bring dem i kog. Kog rødbederne i ca. 30 min., til de er møre, men stadig har lidt bid.
Kom koldt vand på rødbederne, så de køler lidt af, og ”gnid” skindet af efterfølgende, så du kommer ind til rødbedens silkebløde indre.
Skær rødbeder ud i grove tern, og kom dem i en gryde med eddike, sukker og olivenolie.
Lad eddiken koge ind i rødbederne, så de bliver glaserede, og lagen får konsistens som sirup.
Tjek torskefileterne for evt. vildfarne ben og for friskhed (de skal dufte af hav – ikke af havn!).
Skær torsken ud i helt små tern. Brug en skarp kniv, så kødet bliver skåret – ikke moset.
Kom torsketataren i en skål, krydr med salt og peber, og rør rundt.
Form tataren til 4 små bøffer, og sæt dem i køleskabet i 10 min., så tataren lige sætter sig inden den steges.
Varm en pande op, og steg de tynde skiver spæk, så de bliver sprøde og krøller lidt sammen. Tag spækket af panden, og læg det på et stykke køkkenrulle.
Hæld overskydende fedt af panden, og steg så tatarbøfferne i 30 sek. – bare på den ene side. På den måde får de en flot steges korpe, samtidig med at de stadig er rå.
Server bøfferne med de lune, glaserede rødbeder, det sprøde spæk, lidt salat og friskskrabet peberrods-sne (se næste opskrift).
Jeg elsker klassisk kogetorsk med hele svineriet: syltede rødbeder, spæk, høvlet peberrod, fiskesennep og smørsovs – og denne forret er min moderne variant af den evigtgode kombination.
Its a recipe text, the first half is the ingredients with their quantities and the second half is the steps. I'm trying to match using Regex the ingredients and the steps separately.
For ingredients I came up with this Regex string ^(\d|[a-z]).*(?=[A-Z].*)?$ and the for the steps I did this ^[A-Z].*.
However the piece of text is part of a document with recipes each with their own ingredients and steps, so I want to identify each recipe separately. To do that I want to match the ingredients up until the first occurence of the steps pattern and the steps until the first occurence of the ingredients pattern.
How do I do that?

You don't need a regex:
from itertools import imap
from itertools import takewhile, groupby
with open("recipes.txt") as f:
grps = groupby(imap(str.rstrip, f), key=str.islower )
for k, v in grps:
if k:
ing, steps = list(v), list(next(grps, ("", ""))[1])
print(ing)
print(steps)
print("\n\n")
That will work regardless of spacing once the ingredients are always lowercase.
Input:
200 g torskefilet
havsalt og friskkværnet peber
8 tynde skiver røget spæk
150 g rødbede (ca. 2 stk.)
½ dl blommeeddike
1 spsk. olivenolie
1 spsk. rørsukker
lidt rødbedeblade eller anden bitter salat
Vask rødbederne, kom dem i en gryde med vand, og bring dem i kog. Kog rødbederne i ca. 30 min., til de er møre, men stadig har lidt bid.
Kom koldt vand på rødbederne, så de køler lidt af, og ”gnid” skindet af efterfølgende, så du kommer ind til rødbedens silkebløde indre.
Skær rødbeder ud i grove tern, og kom dem i en gryde med eddike, sukker og olivenolie.
Lad eddiken koge ind i rødbederne, så de bliver glaserede, og lagen får konsistens som sirup.
Tjek torskefileterne for evt. vildfarne ben og for friskhed (de skal dufte af hav – ikke af havn!).
Skær torsken ud i helt små tern. Brug en skarp kniv, så kødet bliver skåret – ikke moset.
Kom torsketataren i en skål, krydr med salt og peber, og rør rundt.
Form tataren til 4 små bøffer, og sæt dem i køleskabet i 10 min., så tataren lige sætter sig inden den steges.
Varm en pande op, og steg de tynde skiver spæk, så de bliver sprøde og krøller lidt sammen. Tag spækket af panden, og læg det på et stykke køkkenrulle.
Hæld overskydende fedt af panden, og steg så tatarbøfferne i 30 sek. – bare på den ene side. På den måde får de en flot steges korpe, samtidig med at de stadig er rå.
Server bøfferne med de lune, glaserede rødbeder, det sprøde spæk, lidt salat og friskskrabet peberrods-sne (se næste opskrift).
Jeg elsker klassisk kogetorsk med hele svineriet: syltede rødbeder, spæk, høvlet peberrod, fiskesennep og smørsovs – og denne forret er min moderne variant af den evigtgode kombination.
200 blah
400 bar
foobar bar
Foobar
Bar
Output:
['200 g torskefilet', 'havsalt og friskkv\xc3\xa6rnet peber', '8 tynde skiver r\xc3\xb8get sp\xc3\xa6k', '150 g r\xc3\xb8dbede (ca. 2 stk.)', '\xc2\xbd dl blommeeddike', '1 spsk. olivenolie', '1 spsk. r\xc3\xb8rsukker', 'lidt r\xc3\xb8dbedeblade eller anden bitter salat']
['', 'Vask r\xc3\xb8dbederne, kom dem i en gryde med vand, og bring dem i kog. Kog r\xc3\xb8dbederne i ca. 30 min., til de er m\xc3\xb8re, men stadig har lidt bid.', '', 'Kom koldt vand p\xc3\xa5 r\xc3\xb8dbederne, s\xc3\xa5 de k\xc3\xb8ler lidt af, og \xe2\x80\x9dgnid\xe2\x80\x9d skindet af efterf\xc3\xb8lgende, s\xc3\xa5 du kommer ind til r\xc3\xb8dbedens silkebl\xc3\xb8de indre.', '', 'Sk\xc3\xa6r r\xc3\xb8dbeder ud i grove tern, og kom dem i en gryde med eddike, sukker og olivenolie.', '', 'Lad eddiken koge ind i r\xc3\xb8dbederne, s\xc3\xa5 de bliver glaserede, og lagen f\xc3\xa5r konsistens som sirup.', '', 'Tjek torskefileterne for evt. vildfarne ben og for friskhed (de skal dufte af hav \xe2\x80\x93 ikke af havn!).', '', 'Sk\xc3\xa6r torsken ud i helt sm\xc3\xa5 tern. Brug en skarp kniv, s\xc3\xa5 k\xc3\xb8det bliver sk\xc3\xa5ret \xe2\x80\x93 ikke moset.', '', 'Kom torsketataren i en sk\xc3\xa5l, krydr med salt og peber, og r\xc3\xb8r rundt.', 'Form tataren til 4 sm\xc3\xa5 b\xc3\xb8ffer, og s\xc3\xa6t dem i k\xc3\xb8leskabet i 10 min., s\xc3\xa5 tataren lige s\xc3\xa6tter sig inden den steges.', '', 'Varm en pande op, og steg de tynde skiver sp\xc3\xa6k, s\xc3\xa5 de bliver spr\xc3\xb8de og kr\xc3\xb8ller lidt sammen. Tag sp\xc3\xa6kket af panden, og l\xc3\xa6g det p\xc3\xa5 et stykke k\xc3\xb8kkenrulle.', 'H\xc3\xa6ld overskydende fedt af panden, og steg s\xc3\xa5 tatarb\xc3\xb8fferne i 30 sek. \xe2\x80\x93 bare p\xc3\xa5 den ene side. P\xc3\xa5 den m\xc3\xa5de f\xc3\xa5r de en flot steges korpe, samtidig med at de stadig er r\xc3\xa5.', '', 'Server b\xc3\xb8fferne med de lune, glaserede r\xc3\xb8dbeder, det spr\xc3\xb8de sp\xc3\xa6k, lidt salat og friskskrabet peberrods-sne (se n\xc3\xa6ste opskrift).', '', 'Jeg elsker klassisk kogetorsk med hele svineriet: syltede r\xc3\xb8dbeder, sp\xc3\xa6k, h\xc3\xb8vlet peberrod, fiskesennep og sm\xc3\xb8rsovs \xe2\x80\x93 og denne forret er min moderne variant af den evigtgode kombination.']
['200 blah', '400 bar', 'foobar bar']
['', 'Foobar', 'Bar']
If you want to remove the empty lines:
grps = groupby((line for line in imap(str.rstrip, f) if line), key=str.islower )
Which will remove any empty lines i.e:
['200 blah', '400 bar', 'foobar bar']
['Foobar', 'Bar']

It seems like the first empty line is between the ingredients and the steps, so you might not even need regex:
ingredients, steps = recipe_string.split("\n\n", 1)
This will split the string at the first instance of 2 consecutive newlines.

Related

Python Tokenizer, sentence gets cut off at newline character

I am trying to build a tokenizer with python, I think it is going on pretty well but there is one problem that I cannot seem to solve. I'll try to be as elaborative as possible:
This is the text I am trying to tokenize (txt.gz file):
"Het Franse danceduo Daft Punk hangt hun kenmerkende helmen aan de wilgen .
De dance-act stopt er na 28 jaar mee .
In een bijna acht minuten durende video kondigde het tweetal het afscheid aan .
Een woordvoerder heeft het nieuws aan entertainmentblad Variety bevestigd , maar wilde verder niet uitweiden over de reden van het stoppen .
In de video die vanochtend online kwam zijn Thomas Bangalter en Guy-Manuel de Homem-Christo met hun helmen te zien .
In de bijna dertig jaar dat ze actief waren , hebben ze lange tijd hun identiteit geheim weten te houden .
De twee staan tegenover elkaar en lopen vervolgens uit elkaar terwijl een onheilspellende wind klinkt .
And this is the output I am getting:
" Het Franse danceduo Daft Punk hangt hun kenmerkende helmen aan de wilgen .
dance-act stopt er na 28 jaar mee .
kondigde het tweetal het afscheid aan .
reden van het stoppen .
Homem-Christo met hun helmen te zien .
waren , hebben ze lange tijd hun identiteit geheim weten te houden .
onheilspellende wind klinkt "
This is my code:
import sys
import re
import gzip
def tokenizer(data):
tokens = re.compile('[^ ].*?[.!?]')
list_of_tokens = tokens.findall(data)
print(list_of_tokens)
string_token = ""
string_token = string_token.join(list_of_tokens)
string_token = re.sub('([.,!?()])', r' \1 ', string_token)
return string_token
def main(argv):
with gzip.open(argv[1], 'rt') as f:
data = f.read()
print(tokenizer(data))
if __name__ == '__main__':
main(sys.argv)

How to define a sentence as ,Starting with "uppercase letter" end ending with ".", in a txt file

I'm working on a python script that asks what word you want to find.
It searches for that word in (for example) word.txt file and prints it, including the line + line number.
Since my word.txt file contains paragraphs, the "line" is misinterpreted.
Grammatically, a line means "Starting with" capital letter "and ending with". "Or the like.
But in my script, a sentence (line) ends at the end of the aliena.
I have been googling for " variable containing string that begins with "uppercase" and ending with "." and more without a result.
Down here is my code and below that, the file (a news article) I am using.
fh =open("name.txt","r")
word=input("Enter the word to search:")
s=". "
count=1
while(s):
s=fh.readline()
L=s.split()
if word in L:
print("Line Number:",count,":",s)
count+=1
(name.txt)
Het gaat "heel moeilijk" worden om de verspreiding van de nieuwe variant van het coronavirus tegen te gaan, zei de Britse minister van Volksgezondheid Matt Hancock zondagochtend. "We hebben nog een lange weg te gaan." De gemuteerde versie van het virus is waarschijnlijk een stuk besmettelijker dan eerdere varianten.
Inwoners van Londen en andere gebieden waar vanwege de nieuwe variant strengere lockdowns zijn afgekondigd, moeten zich gedragen alsof ze besmet zijn, zegt Hancock. Dat betekent dat ze moeten thuisblijven, tenzij het echt niet anders kan.
21 miljoen inwoners van Londen en een deel van het oosten en zuidoosten van Engeland mogen elkaar niet meer bezoeken. Voor Kerstmis worden geen uitzonderingen gemaakt.
Niet-essentiële winkels zijn dicht en mensen moeten zoveel mogelijk thuisblijven. Voor werk, studie, buitensport of begrafenissen met maximaal dertig aanwezigen mogen inwoners wel de deur uit.
Mutatie op 9 december goed voor 62 procent van nieuwe gevallen
De nieuwe variant van het coronavirus heeft zich al volop verspreid in Londen en het oosten van Engeland. Het Britse statistiekbureau ONS heeft berekend dat deze mutatie op 9 december al goed was voor 62 procent van alle nieuwe coronabesmettingen in de Britse hoofdstad. In Oost-Engeland werd op die datum in 59 procent van de gevallen het gemuteerde coronavirus vastgesteld.
Uit de cijfers blijkt hoe snel de gemuteerde versie van het virus om zich heen grijpt. Op 18 november maakte deze variant, die in september in Engeland opdook, nog slechts 28 procent van de geconstateerde gevallen in Londen uit.
Het vaccineren van de bevolking is volgens de Britse minister nu des te belangrijker. Het Verenigd Koninkrijk verwacht dat aan het einde van dit weekend ongeveer een half miljoen mensen zijn gevaccineerd.
Nieuwe variant verspreidt zich mogelijk sneller
De ontdekking van de nieuwe stam in Nederland is in de nacht van zaterdag op zondag bekendgemaakt. Op basis van een eerste analyse constateerde een speciale adviesgroep dat deze variant zich mogelijk sneller verspreidt dan eerdere varianten.
Virussen muteren voortdurend. Ze overleven door zich aan te passen aan een andere omgeving. De meeste mutaties van het coronavirus zijn ongevaarlijk.
De nieuwe stam, een variant van SARS-CoV-2 met de wetenschappelijke naam VUI-202012/01, is in september ontdekt. De mutatie is vooral aangetroffen in het zuidoosten van Engeland, maar is ook in Wales vastgesteld. Verder zijn drie gevallen in Denemarken en een in Australië bekend.
Geen duidelijke signalen dat nieuwe veriant gevaarlijker is
"De nieuwe variant is mogelijk 70 procent besmettelijker dan de originele variant van het virus", zei de Britse premier Boris Johnson zaterdag tijdens een persconferentie. Nader onderzoek moet meer duidelijkheid verschaffen.
Er zijn geen duidelijke signalen dat de nieuwe variant ook gevaarlijker is. De kans op een ziekenhuisopname of overlijden is te vergelijken met de kans daarop bij de oorspronkelijke variant van het virus. Ook wijst niets erop dat coronavaccins minder effectief werken tegen de nieuwe variant van het virus.
This should work.
filename = "name.txt"
word = input("Enter the word to search:")
with open(filename, "r") as f:
for i, line in enumerate(f):
new_word = " " + word.lower() + " " # lowercase word with leading and trailing spaces
new_line = " " + line.rstrip("\n").replace(".", "").lower() + " " # lowercase line with leading and trailing spaces, without dot
if new_word in new_line:
print("Line Number:", i, ":", line)

Python Beautifulsoup UnicodeDecodeError

I've read lots of messages around here for this problem, but I couldn't solve it for my particular case. I save a html page in Firefox (the page is one of my Youtube playlist). But I get the error from beautifulsoup:
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8f in position 1000858: character maps to
playlist = BeautifulSoup(html_file, 'lxml', from_encoding="utf-8")
I tried several encoding parameters with no success.
Html file can be downloaded here:
https://www.filehosting.org/file/details/879011/playlist.html
If anyone can help...
Well, after hours spent on browsing everywhere to find a solution, it was really simple actually: just ignoring the errors have produced the right output as you got!
Simply with:
with open('playlist.html', 'r', encoding='utf-8', errors='ignore') as f_in:
soup = BeautifulSoup(f_in.read(), 'html.parser')
Thank you for your help!
PS: I'm just wondering if the errors weren't caused by lots of graphical characters due to special fonts used (little drawings next to the titles)...
I downloaded your file from the filehosting, and from_encoding="utf-8" is not needed - it produces warning if it's there.
from bs4 import BeautifulSoup
with open('playlist.html', 'r') as f_in:
soup = BeautifulSoup(f_in.read(), 'html.parser')
for title in soup.select('#video-title'):
print(title.get_text(strip=True))
Prints:
Gordon Ramsay Cooks Carbonara in Under 10 Minutes | Ramsay in 10
Sans four, frais et doux en quelques minutes # 303
Comment faire des tomates séchées au soleil - Les Sourciers
Italian homemade sun dried tomatoes
Recette du clafoutis moelleux aux cerises - 750g
Recette des Carrés Framboise Pistache
Une QUICHE ensoleillée et végétarienne pour un repas facile à faire !
Millionaires Shortbread Recipe - Layers of WIN! | Cupcake Jemma
Rum Raisin Ice Cream Recipe Demonstration - Joyofbaking.com
🍋 ENTREMETS CITRON PRALINÉ 🍋
Recette de Tarte aux Fruits
Anna Bakes DECADENT Chocolate Whoopie Pies!
Ultimate Lemon Meringue Layer Cake | Cupcake Jemma
Blueberry Pie Recipe Demonstration - Joyofbaking.com
The Macaron is dead! Long live the Macaroon! | Cupcake Jemma
Anna Makes AMAZING Raspberry Jelly Donuts!
Des SANDWICHS originaux et surtout à dévorer avec les doigts !
Astuce de boulanger  comment préparer une baguette tradition maison Gontran cherrier
Recette des Tartelettes Citron Chocolat Blanc Estragon de Frédéric Bau
Cream Cheese Cookies
🌰 GANACHE AU PRALINÉ 🌰
Anna Bakes INCREDIBLE Fudge Brownies LIVE!
Triple Chocolate Brownies Recipe Demonstration - Joyofbaking.com
Make your own Piping Bag! Quick & Easy DIY Piping Bag Tip | Cupcake Jemma
Professional Baker's Best Checkerboard Cookie Recipe!
Anna Bakes an AMAZING Mango Mousse Tart!
Un LAYER CAKE AUX FRAISES expliqués pas à pas pour une parfaite réussite !
🔥 CHOUQUETTES FACILE ET INRATABLES 🔥
Recette des Petites Tropéziennes Fraise Vanille
Anna Bakes CLASSIC Florentine Cookies!
Classic Carrot Cake Recipe | Cupcake Jemma
Anna Teaches You How To Make PIE DOUGH LIVE | Oh Yum 101
🌰 TARTE PRALINOISE (CHOCOLAT PRALINÉ) FACILE 🌰
🐿 SALAMBO MAISON (ou GLAND) 🐿
Tuto Recette : La Tarte Alsacienne aux Cerises ! 🍒
Recette de Brookies
Anna Bakes OUTSTANDING Pfeffernusse Cookies!
Une recette accessible aux enfants avec seulement 1 courgette, 2 tomates et 3 œufs| Savoureux.tv
Biscuits Recipe Demonstration - Joyofbaking.com
🍓 TARTE AUX FRAISES TRADITIONNELLE et FACILE 🍓
Anna Bakes AMAZING Crispy Lavash Bread!
Tuto Recette Facile : la Focaccia
👱‍♀ CHEESECAKE PISTACHE FRAMBOISE SPÉCIAL FÊTE DES MÈRES 👱‍♀
Recette de Cake Salé aux Pruneaux, Lardons et Fromage
Anna Bakes OUTSTANDING Blood Orange Syrup Cake!
Professional Baker's Best Rhubarb Crumble Tart Recipe!
Double Rainbow Cupcakes! | Bake with Sally | Cupcake Jemma
🌞 LES MONTECAOS ! 2 RECETTES FACILES ET RAPIDES 🌞
Petit déjeuner pour les paresseux - je mets tout dans une casserole et sur la cuisinière
Raspberry White Chocolate New York Cookie Bake Along! | with Jemma, Sally & Dane
Recette de Choux Pralinés façon Paris-Brest
🍓 GÂTEAU ROULÉ AUX FRAISES 🍓
Tuto Recette Facile : le Cake Chocolat et Gianduja
Réalisez ces délicieux carrés au chocolat, crémeux et moelleux. Ils sont SUPER!| Savoureux.tv
Recette des Rochers Noix de Coco Framboise Chocolat Blanc
🥖 PAIN MAGIQUE SANS PÉTRISSAGE, FACILE ET RAPIDE (et ultra bon) ! 🥖
Recette Spéciale CAP : la Charlotte Poire Chocolat !
🌰 BISCUITS SABLÉS AU NUTELLA 🌰
Tuto Recette : le Banoffee, c'est facile !
Recette des Pains ou Buns Farcis au Poulet, Légumes et Épices
Butter Fingers - Les Petits Croissants aux Amandes et aux Pignons de Pin
RECETTE PETITS CROISSANTS AMANDE PIGNONS FLEUR D'ORANGER
Le Succès Praliné : la recette facile expliquée de A à Z !
Recette des Sablés au Sarrasin, Graines et Perles au Chocolat de Frédéric Bau
Professional Baker's Best Pretzel Recipe!
Recette du Gâteau Napolitain maison
Recette du Paris-Brest
Recette de gâteau au chocolat simple et délicieuse. Mélangez le tout et goûtez le!| Savoureux.tv
Recette du Milkshake à la fraise - 750g
Très simple et fait en seulement 2 minutes.| Savoureux.tv
Recette de la Tarte Tropézienne
💕 PASTEIS DE NATA (FLANS PORTUGAIS) à LISBONNE ! 💕
Recette de Cupcakes à la Vanille Cœur Praliné
Super Easy, Ridiculously Tasty Lamingtons Recipe! | Bake at Home | Cupcake Jemma
Recette de Verrines Fraise Citron
Biscuits salés faits maison - ils sont parfaits pour le panier-repas !| Savoureux.tv
🍓 CHARLOTTE AUX FRAISES FACILE (tuerie !) 🍓
Coffee cake ou Gâteau pour le café - 750g
Crème Caramel
Ceci est une nouvelle recette. Un gâteau d'exception!| Savoureux.tv
BEIGNETS au FOUR sans friture : + légers et moelleux 😜
Cake aux pommes facile et rapide - 750g
Recette de Gâteau aux pommes et au yaourt - 750g
Italian Grandma Makes Gnocchi
Tuto Recette : les Pizzas Faciles !
🥐 RECETTE DES CROISSANTS MAISON 🥐
Muffins au fromage - ils sont si savoureux et moelleux qu’ils fondent dans la bouche! | Savoureux.TV
Professional Baker's Best Double Chocolate Trifle Recipe!
Professional Baker's Best Chocolate Torte Recipe!
How to Make Perfect Caramel Popcorn | Cupcake Jemma
Double Choc Chip NYC Cookies | Super Gooey Chocolate New York Cookie Recipe | Cupcake Jemma
Red Velvet New York Cookie Recipe! | Cupcake Jemma
Recette des Petites Baguettes de Pain Maison
Recette du sunday et ses 4 accompagnements GOURMANDS - 750g
🐯 TIGRÉS AU NUTELLA, RECETTE FACILE ET RAPIDE 🐯
BAKE AT HOME | Jamaican Ginger Loaf Cake | Cupcake Jemma
4 recettes étonnantes et gourmandes avec des fraises - 750g
⚓ FAR BRETON NATURE - FACILE ET RAPIDE ⚓
Recette Spéciale CAP : la Pâte Feuilletée, le Millefeuille et les Chaussons a
Homemade Mac & Cheese with Cauliflower | Keep Cooking & Carry On | Jamie Oliver #withme

Frequency of words in a text (pandas)

I have a column of words and would like to count the frequency of each word in a text and save that result in another column.
Data:
word frequency
0 l’iss
1 station
2 américaines
3 capsule
4 dernier
5 solaires
6 fusées
7 privé
Text:
états-unis : lancement réussi pour station space x dragon états-unis : lancement réussi pour space x dragon la fusée falcon 9, développée par une société privée : spacex, a décollé de la station sans problème ce matin à 7h44 utc. 22 mai 2012. - prévu initialement pour samedi dernier, le lancement a été reporté à la dernière seconde, suite à la défaillance d'une valve dans un des neuf moteurs du pre\xadmier étage du lan\xadceur. le lanceur a décollé du site de lancement du pas de tir 40 (slc-40) de la base de cape canaveral en floride, qui était autrefois utilisé pour les fusée titan iii et iv et qui a été reconverti pour ce lanceur.
I tried:
from collections import Counter
freq = df['word'].str.apply(Counter(text))
My output:
AttributeError: 'StringMethods' object has no attribute 'apply'
Good output:
word frequency
0 cape 1
1 station 2
2 américaines 0
3 capsule 0
4 dernier 1
5 solaires 0
6 fusée 2
You can transform the text into a counter and then fetch the results from it, using a mix of value_counts and to_dict.
# Assuming the text split is on \s
text_counts = pd.Series(text.split(' ')).value_counts().to_dict()
df['Frequency'] = df.word.apply(lambda x: text_counts.get(x, 0)) # In case the word doesn't exist
word Frequency
0 l’iss 0
1 station 2
2 américaines 0
3 capsule 0
4 dernier 0
5 solaires 0
6 fusées 0
7 privé 0
Another approach is using Python's native Counter:
from collections import Counter
text_counter = Counter(text.split())
df['Frequency'] = df.word.apply(lambda x: text_counter.get(x, 0))
It would be easier the other way around. Start with the Counter object and from that build the dataframe
from collections import Counter
text = '''états-unis : lancement réussi pour station space x dragon états-unis : lancement réussi pour space x dragon la fusée falcon 9, développée par une société privée : spacex, a décollé de la station sans problème ce matin à 7h44 utc. 22 mai 2012. - prévu initialement pour samedi dernier, le lancement a été reporté à la dernière seconde, suite à la défaillance d'une valve dans un des neuf moteurs du pre\xadmier étage du lan\xadceur. le lanceur a décollé du site de lancement du pas de tir 40 (slc-40) de la base de cape canaveral en floride, qui était autrefois utilisé pour les fusée titan iii et iv et qui a été reconverti pour ce lanceur.'''
# naive splitting, it might be better to use regex with \b
c = Counter(text.split())
df = pd.DataFrame(list(c.items()), columns=['word', 'count'])
print(df.head())
Outputs
word count
0 états-unis 2
1 : 3
2 lancement 4
3 réussi 2
4 pour 5
You can then filter the dataframe for the words you want (or you can do the filtering while building the dataframe).
Replace your commas with space, then .split() and then use a dictionary comprehension and map that to your df.
import pandas as pd
text = "états-unis : lancement réussi pour station space x dragon états-unis : lancement réussi pour space x dragon la fusée falcon 9, développée par une société privée : spacex, a décollé de la station sans problème ce matin à 7h44 utc. 22 mai 2012. - prévu initialement pour samedi dernier, le lancement a été reporté à la dernière seconde, suite à la défaillance d'une valve dans un des neuf moteurs du pre\xadmier étage du lan\xadceur. le lanceur a décollé du site de lancement du pas de tir 40 (slc-40) de la base de cape canaveral en floride, qui était autrefois utilisé pour les fusée titan iii et iv et qui a été reconverti pour ce lanceur."
df = pd.DataFrame({'word': ["l’iss", 'station', "américaines", "capsule", "dernier", "solaires", "fusée", "privé"]})
text_list = text.replace(',', ' ').split()
word_counts = {i: text_list.count(i) for i in text_list}
df['frequency'] = df['word'].map(word_counts).fillna(0)
You could summarise the word counts in a dict then use map:
text_list = text.split()
word_counts = {word: text_list.count(word) for word in text_list}
df['frequency'] = df['word'].map(word_counts).fillna(0)

XPath with Scrapy node begins with \n

I'm using scrapy on html like:
<td nowrap="" valign="top" align="right">
<br>
Text is here.
<br>
Other text is here
<br>
</td>
td[1]/text()[1] gives me:
(empty line)
Text is here.
I've tried normalize-space, i.e. normalize-space(td[1]/text()[1]), which works when I test in my firefox extension, but not in scrapy. I think scrapy is getting tripped up by the \n and it skips over (or only takes first line of node, which is nothing). I've also tried some "preceding" and "following" code, but I think it might be considered one element, my DOM says the nodeValue = "\nText is here" Any thoughts?,
Extract every text, get the desired one by index. For instance:
response.xpath("//table[#id='myid']/tr[1]/td[1]//text()")[1]
Demo from the Scrapy Shell:
$ scrapy shell http://www.trobar.org/troubadours/coms_de_peiteu/guilhen_de_peiteu_01.php
In [1]: table = response.xpath("//table")[2]
In [2]: td = "".join(table.xpath(".//td[1]//text()").extract())
In [3]: print(td)
Companho, farai un vers qu'er covinen,
Et aura-i mais de foudatz no-y a de sen,
Et er totz mesclatz d'amor e de joy e de joven.
E tenguatz lo per vilan qui no-l enten,
O dins son cor voluntiers non l'apren:
Greu partir si fai d'amor qui la troba a talen.
Dos cavalhs ai a ma sselha, ben e gen,
Bon son et adreg per armas e valen,
E no-ls puesc amdos tener, que l'us l'autre non cossen.
Si-ls pogues adomesjar a mon talen,
Ja no volgr'alhors mudar mon garnimen,
Que meils for'encavalguatz de nuill ome viven.
Launs fon dels montaniers lo plus corren,
Mas aitan fer' estranhez'a longuamen
Et es tan fers e salvatges, que del bailar si defen.
L'autre fon noyritz sa jus part Cofolen
Ez anc no-n vis bellazor, mon escien:
Aquest non er ja camjatz ni per aur ni per argen.
Qu'ie-l donei a son senhor polin payssen,
Pero si-m retinc ieu tan de covenen
Que, s'ilh lo tenia un an, qu'ieu lo tengues mais de cen.
Cavalier, datz mi cosselh d'un pessamen:
-Anc mays no fuy issaratz de cauzimen- :
Res non sai ab qual me tengua, de n'Agnes o de n'Arsen.
De Gimel ai lo castel e-l mandamen,
E per Niol fauc ergueill a tota gen:
C'ambedui me son jurat e plevit per sagramen.

Categories

Resources