如果单词的第一个字母是元音,如何返回 1,否则返回 0。映射器(MapReduce)问题

问题描述 投票:0回答:0

这是我正在处理的 MapReduce 问题的第一部分。我需要一个函数,如果单词的第一个字母以元音开头,则返回 1,否则返回 0。

程序通过管道将文本文件传输到映射器在终端中运行,如下所示:

cat test.txt | python3 mapper.py

这是包含字符串的文本文件的预期输出

its a beautiful life

i 1 1 0   
t 1 0 0
s 1 0 0
a 1 1 1
b 1 0 0
e 1 0 0
a 1 0 0
u 1 0 0
t 1 0 0
i 1 0 0  
f 1 0 0
u 1 0 0
l 1 0 0
l 1 0 0
i 1 0 0 
f 1 0 0
e 1 0 1

我成功完成了前两列输出的分配,但我在第三列上遇到了问题。如果单词的第一个字母是元音,它应该产生 1,否则产生 0。

我当前的输出如下:

i 1 1 0
t 1 1 0
s 1 1 0
a 1 1 0
b 1 1 0
e 1 1 0
a 1 1 0
u 1 1 0
t 1 1 0
i 1 1 0
f 1 1 0
u 1 1 0
l 1 1 0
l 1 1 0
i 1 1 0
f 1 1 0
e 1 1 0

这是我到目前为止编写的代码:

import sys
import re
pattern = re.compile("^[a-z]+$") # matches purely alphabetic words
starting_vowels = re.compile("(^[aeiouAEIOU])") # matches starting vowels 
ending_vowels = re.compile("[aeiouAEIOU]$") # matches ending vowels
# starting_vowel_match = 0
ending_vowel_match = 0

def first_vowel():
    for token in tokens:
        if starting_vowels.match(token[0]):
            yield '1'
        else:
            yield '0'

for line in sys.stdin:
    line = line.strip() # removes leading and trailing whitespace
    tokens = line.split() # splits words into list, needed for part 2
    mashed_line = line.replace(" ","")
    lower_mashed_line = mashed_line.lower()
    for letter in lower_mashed_line: 
        if pattern.match(letter): # if pattern matches, prints 'word 1'
            print('%s 1' % letter, next(first_vowel()), ending_vowel_match)
python mapreduce generator yield mapper
© www.soinside.com 2019 - 2024. All rights reserved.