Считать слова, включая специальные символы и игнорировать капитализацию в Pyspark? - PullRequest
2 голосов
/ 21 февраля 2020

Я работаю над небольшим проектом, чтобы понять PySpark, и я пытаюсь заставить PySpark выполнить следующие действия над словами в txtfile; он должен «игнорировать» любые изменения в заглавных буквах слов (т. е. «время» против «время») и «игнорировать» любые дополнительные символы, которые могут быть в конце слов (т. е. оранжевый против оранжевый, против оранжевый. против оранжевый? ) и посчитать их все как одно и то же слово.

Я вполне уверен, что требуется какое-то лямбда-выражение или выражение регулярного выражения, но я не знаю, как его обобщить настолько, чтобы можно было вытолкнуть любой текстовый файл (как в книге) и пусть он выплюнет правильный анализ.

Вот мой Код на данный момент:

import sys

from pyspark import SparkContext, SparkConf

input = sc.textFile("/home/user/YOURFILEHERE.txt")
words = input.flatMap(lambda line: line.split(" "))
wordCounts = words.map(lambda word: (word, 1)).reduceByKey(lambda a,b:a +b)
wordCounts.collect() 

Последнее, что мне нужно сделать, - это сделать частотный анализ для слова (т. е. слово «пока» отображается в 80% случаев), но я совершенно уверен, как это сделать, и сейчас добавляю его для того, что имею сейчас; У меня просто так много проблем с заглавными буквами и включением специальных символов.

Любая помощь по этому вопросу, даже просто руководство, была бы полезна. Спасибо, ребята!

1 Ответ

1 голос
/ 21 февраля 2020

просто замените ввод вашим текстовым файлом, ключом является функция word_munge

import string
import re
def word_munge(single_word):                                                                                                                               
    lower_case_word=single_word.lower()                                                                                                                    
    return re.sub(f"[{re.escape(string.punctuation)}]", "", lower_case_word)

input_string="While orange, while orange while orange." 
input_rdd = sc.parallelize([input_string])                                                                                                                  
words = input_rdd.flatMap(lambda line: line.split(" "))
(words.
 map(word_munge).
 map(lambda word: (word, 1)).
 reduceByKey(lambda a, b: a+ b)
).take(2)                                                

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...