天道酬勤,学无止境

在 Python 中将句子转换为 Piglatin [重复](Converting a sentence to piglatin in Python [duplicate])

问题

我必须用 Python 编写一个程序,将句子转换为猪拉丁语。 Pig Latin 的松散定义是取每个单词的第一个字母,将其放在单词的末尾,并在每个单词的末尾添加“ay”。 我不知道如何将字符串中的每个单词的第一个字母分开,更不用说将其添加到末尾。我假设一旦将其删除,就有一种方法可以将它连接到新单词然后连接“ay” . 我在这里非常迷茫。 经过大量的反复试验这就是我所拥有的,即使这似乎也不能正常工作。 任何帮助深表感谢。

def main():        
    sentence = input('Type what you would like translated into pig-latin and press ENTER: ')
    sentence_list = sentence.split()

    for part in sentence_list:
        first_letter = part[0]

main()
回答1

这是代码:

def main():
        lst = ['sh', 'gl', 'ch', 'ph', 'tr', 'br', 'fr', 'bl', 'gr', 'st', 'sl', 'cl', 'pl', 'fl']
        sentence = input('Type what you would like translated into pig-latin and press ENTER: ')
        sentence = sentence.split()
        for k in range(len(sentence)):
                i = sentence[k]
                if i[0] in ['a', 'e', 'i', 'o', 'u']:
                        sentence[k] = i+'ay'
                elif t(i) in lst:
                        sentence[k] = i[2:]+i[:2]+'ay'
                elif i.isalpha() == False:
                        sentence[k] = i
                else:
                        sentence[k] = i[1:]+i[0]+'ay'
        return ' '.join(sentence)

def t(str):
        return str[0]+str[1]

if __name__ == "__main__":
        x = main()
        print(x)

运行如下:

bash-3.2$ python3 pig.py
Type what you would like translated into pig-latin and press ENTER: my gloves are warm
ymay ovesglay areay armway
bash-3.2$ 

此代码使用此处找到的逻辑。

回答2

这是一个快速的

def main():
    words = str(input("Input Sentence:")).split()
    for word in words:
        print(word[1:] + word[0] + "ay", end = " ")
    print ()

main()

更好的解决方案可能会使用列表理解,因此您可以实际使用输出,但这会满足您的要求。

编辑:这适用于 python3.x 如果您希望它适用于 python2,您将获得更多乐趣。 只需将每个单词的字符串加在一起,然后打印结果字符串。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 猪拉丁语翻译器(Pig Latin Translator)
    问题 因此,我有一个基本的Pig Latin翻译器,只能翻译一个单词。 def Translate(Phrase): Subscript = 0 while Phrase[Subscript] != "a" or Phrase[Subscript] != "e" or Phrase[Subscript] != "i" or Phrase[Subscript] != "o" or Phrase[Subscript] != "u": Subscript += 1 if Phrase[Subscript] == "a" or Phrase[Subscript] == "e" or Phrase[Subscript] == "i" or Phrase[Subscript] == "o" or Phrase[Subscript] == "u": return Phrase[Subscript:] + Phrase[:Subscript] + "ay" 有人可以协助我编辑此翻译器以使用多个单词吗? 谢谢你。 回答1 这是猪拉丁语方言,它考虑了单词的发音方式: #!/usr/bin/env python # -*- coding: utf-8 -*- import re sentences = ["Pig qoph an egg.", "Quiet European rhythms.", "My
  • 在Java中将句子字符串转换为单词的字符串数组(Converting a sentence string to a string array of words in Java)
    问题 我需要我的Java程序采用类似以下的字符串: "This is a sample sentence." 并将其转换为一个字符串数组,如: {"this","is","a","sample","sentence"} 没有句号或标点符号(最好)。 顺便说一句,字符串输入始终是一个句子。 有没有一种我看不到的简便方法? 还是我们真的必须大量搜索空格并从空格之间的区域(即单词)创建新的字符串? 回答1 String.split()将完成您想要的大部分操作。 然后,您可能需要遍历单词以提取任何标点符号。 例如: String s = "This is a sample sentence."; String[] words = s.split("\\s+"); for (int i = 0; i < words.length; i++) { // You may want to check for a non-word character before blindly // performing a replacement // It may also be necessary to adjust the character class words[i] = words[i].replaceAll("[^\\w]", ""); } 回答2 现在,只需使用split即可完成此操作
  • python猪拉丁转换器(python pig latin converter)
    问题 请帮我! 我正在将多行文本文件转换为猪拉丁文。 示例:Pig的拉丁语翻译:这是一个示例。 应该是:Histay siay naay xampleeay。 我需要将标点符号留在原处(在大多数情况下,句子的结尾)我还需要任何以原始字母大写字母开头的单词,以及以猪拉丁文版本以大写字母开头的单词,其余的字母小写。 这是我的代码: def main(): fileName= input('Please enter the file name: ') validate_file(fileName) newWords= convert_file(fileName) print(newWords) def validate_file(fileName): try: inputFile= open(fileName, 'r') inputFile.close() except IOError: print('File not found.') def convert_file(fileName): inputFile= open(fileName, 'r') line_string= [line.split() for line in inputFile] for line in line_string: for word in line: endString= str(word[1:])
  • 正则表达式匹配两个字符串之间的所有字符(Regex Match all characters between two strings)
    问题 示例:“这只是\一个简单的句子”。 我想匹配“这是”和“句子”之间的每个字符。 换行符应忽略。 我找不到正确的语法。 回答1 例如 (?<=This is)(.*)(?=sentence) 正则表达式 我使用了lookbehind (?<=)并向前看(?=)以便在匹配中不包括“ This is”和“ Sentence”,但这取决于您的用例,您也可以简单地编写This is(.*)sentence 。 这里重要的是要激活regex引擎的“ dotall”模式,以便. 与换行符匹配。 但是,如何执行此操作取决于您的正则表达式引擎。 接下来是使用.*或.*? 。 第一个是贪婪的,将匹配到字符串中的最后一个“句子”,第二个是懒惰的,将匹配到字符串中的下一个“句子”。 更新 正则表达式 This is(?s)(.*)sentence (?s)打开dotall修饰符的位置,使. 匹配换行符。 更新2: (?<=is \()(.*?)(?=\s*\)) 与您的示例“这是(一个简单的)句子”匹配。 在Regexr上看到这里 回答2 需要惰性量词 重新提出这个问题,因为接受的答案中的正则表达式对我而言似乎不太正确。 为什么? 因为 (?<=This is)(.*)(?=sentence) 会匹配my first sentence. This is my second my first
  • NLP中文信息处理---正向最大匹配法分词
    弄了好几天正向最大匹配法分词,终于弄完了吧。Python写的。Python确实是一门好语言,写起来很简单、顺手。一、关于正向最大匹配法分词中文分词(Chinese Word Segmentation)指的是将一个汉字序列切分成一个一个单独的词。中文分词是文本挖掘的基础,对于输入的一段中文,成功的进行中文分词,可以达到电脑自动识别语句含义的效果。正向最大匹配法:例子: 将句子 ’ 今天来了许多新同事 ’ 分词。 设最大词长为5今天来了许今天来了今天来今天 ====》 得到一个词 – 今天来了许多新来了许多来了许来了来 ====》 得到一个词 – 来了许多新同了许多新了许多了许了 ====》 得到一个词 – 了许多新同事许多新同许多新许多 ====》得到一个词 – 许多新同事新同新 ====》得到一个词 – 新同事 ====》得到一个词 – 同事最后正向最大匹配的结果是:/今天/来/了/许多/新/同事/二、正向最大匹配分词算法三、语料库的处理与算法的输入语料库的处理流程:输入:人民日报语料库199801.txt输出:dict.txt词表文件分词算法:输入:将dict.txt处理后得到的list集,以及最大词长;待分词的句子输出:分词后的句子四、Python实现1. 语料库的初步处理 ( MaxBuildDict.py )[python]view plaincopy# -*-
  • 在NLTK中将段落标记为句子,然后标记为单词(Tokenize a paragraph into sentence and then into words in NLTK)
    问题 我试图将整个段落输入到我的文字处理器中,然后先分成句子,然后再分成单词。 我尝试了以下代码,但是它不起作用, #text is the paragraph input sent_text = sent_tokenize(text) tokenized_text = word_tokenize(sent_text.split) tagged = nltk.pos_tag(tokenized_text) print(tagged) 但是,这不起作用,并给我错误。 那么,如何将段落标记为句子,然后再标记为单词? 一个示例段落: 这东西似乎使那只黑褐色的小狗感到吃惊和震惊,使他伤心欲绝。 他绝望地沉在孩子的脚下。 当重击一声再加上幼稚的训诫时,他转过身来,用独特的方式握住了爪子。 同时,他用耳朵和眼睛向孩子祈祷。 **警告:**这只是互联网上的随机文字,我不拥有上述内容。 回答1 您可能打算遍历sent_text : import nltk sent_text = nltk.sent_tokenize(text) # this gives us a list of sentences # now loop over each sentence and tokenize it separately for sentence in sent_text: tokenized_text =
  • 在python中将指数形式的数字转换为十进制形式[重复](Converting a number in exponential form to decimal form in python [duplicate])
    问题 这个问题已经在这里有了答案: 打印浮点值时如何抑制科学记数法? (12 个回答) 6年前关闭。 我有一个非常愚蠢的问题,假设我有一个数字1.70000043572e-05我应该如何将它转换为浮点数,即0.0000170000043572 。 回答1 您需要转换为浮点数并使用 str.format 指定精度: In [41]: print "{:f}".format(float("1.70000043572e-05")) 0.000017 # 16 digits In [38]: print "{:.16f}".format(float("1.70000043572e-05")) 0.0000170000043572 只是调用 float 会给出1.70000043572e-05 。 使用旧样式格式: In [45]: print( "%.16f" % float("1.70000043572e-05")) 0.0000170000043572 回答2 如果您只是将数字输入到脚本中,python 会将其理解为浮点数。 如果它是一个字符串,则使用它的内置浮点数进行转换,例如: x = float("0.423423e4") print "%.2f" % (x) 将输出 4234.23
  • 在 Python 中将分钟转换为 HH:MM 格式[重复](Converting minutes to HH:MM format in Python [duplicate])
    问题 这个问题在这里已经有了答案: 如何获得小时:分钟(4 个回答) 7年前关闭。 首先,我想指出我是 Python 的初学者。 我的问题是我无法弄清楚在 Python 中将分钟转换为 HH:MM 格式的正确方法是什么。 任何帮助表示赞赏! 回答1 使用 divmod() 函数: '{:02d}:{:02d}'.format(*divmod(minutes, 60)) 这里divmod()将分钟除以 60,返回小时数和余数合一。 演示: >>> minutes = 135 >>> '{:02d}:{:02d}'.format(*divmod(minutes, 60)) '02:15'
  • 在javascript中将字符串转换为句子大小写(Convert string to sentence case in javascript)
    问题 我希望输入的字符串在任何情况下都应转换为句子大小写。 喜欢 大家好,这是DERP。 谢谢大家回答我的询问。 转换为 大家好,这是DERP。 谢谢大家回答我的询问。 回答1 试试这个,它会为您工作正常。 它也适用于具有前导空格的String 。 var string="hi all, this is derp. thank you all to answer my query."; var n=string.split("."); var vfinal="" for(i=0;i<n.length;i++) { var spaceput="" var spaceCount=n[i].replace(/^(\s*).*$/,"$1").length; n[i]=n[i].replace(/^\s+/,""); var newstring=n[i].charAt(n[i]).toUpperCase() + n[i].slice(1); for(j=0;j<spaceCount;j++) spaceput=spaceput+" "; vfinal=vfinal+spaceput+newstring+"."; } vfinal=vfinal.substring(0, vfinal.length - 1); alert(vfinal); 回答2 我想出了这种RegExp: var rg =
  • 如何将每个句子的首字母大写?(How to capitalize the first letter of every sentence?)
    问题 我正在尝试编写一个将每个句子的首字母大写的程序。 到目前为止,这就是我的意思,但是我无法弄清楚如何增加句子之间的句点。 例如,如果我输入: 你好。 再见 输出是 你好再见 而且那个时期已经消失了。 string=input('Enter a sentence/sentences please:') sentence=string.split('.') for i in sentence: print(i.capitalize(),end='') 回答1 您可以使用nltk进行句子分割: #!/usr/bin/env python3 import textwrap from pprint import pprint import nltk.data # $ pip install http://www.nltk.org/nltk3-alpha/nltk-3.0a3.tar.gz # python -c "import nltk; nltk.download('punkt')" sent_tokenizer = nltk.data.load('tokenizers/punkt/english.pickle') text = input('Enter a sentence/sentences please:') print("\n" + textwrap.fill(text))
  • .NET方法将字符串转换为句子大小写(.NET method to convert a string to sentence case)
    问题 我正在寻找一种将UpperCase中的文本字符串转换为SentenceCase的函数。 我可以找到的所有示例都将文本变成TitleCase。 一般情况下,句子大小写描述了在句子中使用大写的方式。 句子大小写还描述了英语句子的标准大写,即句子的第一个字母大写,其余为小写(除非出于特殊原因要求大写,例如专有名词,首字母缩写等)。 谁能指出我的SentenceCase脚本或函数的方向吗? 回答1 .NET没有内置任何内容-但是,这是正则表达式处理实际上可能工作良好的情况之一。 我首先将整个字符串转换为小写字母,然后作为一个近似值,可以使用regex查找所有序列,例如[az]\.\s+(.) ,然后使用ToUpper()转换捕获的字符串组为大写。 RegEx类具有重载的Replace()方法,该方法接受MatchEvaluator委托,该委托使您可以定义如何替换匹配的值。 这是工作中的代码示例: var sourcestring = "THIS IS A GROUP. OF CAPITALIZED. LETTERS."; // start by converting entire string to lower case var lowerCase = sourcestring.ToLower(); // matches the first sentence of a string
  • 反转句子中的单词(Reversing words in a sentence)
    问题 我目前正在研究KN King的C编程:一种现代方法。 我已经读完了第八章(数组)的内容,我很想继续学习第9章,但是我还没有在每章末尾解决所谓的“编程项目”。 不幸的是,第十四...使我烦恼。 编写一个使句子中的单词反向的程序。 Enter a sentence: you can cage a swallow can't you? Reversal of sentence: you can't swallow a cage can you? 提示:使用循环逐个读取字符并将它们存储在一维char数组中。 使循环在句点,问号或感叹号(“终止字符”)处停止,该点保存在单独的char变量中。 然后使用第二个循环在数组中向后搜索最后一个单词的开头。 打印最后一个单词,然后向后搜索倒数第二个单词。 重复直到到达数组的开头。 最后,打印终止符。 我一直在考虑将单词定义为空格之间的字符序列。 因此,当到达一个空格时,请向后移动,打印每个字符,直到找到另一个空格为止。 我的程序的第一个版本仅打印了第一个单词。 当前版本仅显示其他单词。 我已经坚持了两天,所以真的很感谢您的帮助。 这是我的代码以及输出示例。 希望我已经正确记录了我的代码。 提前致谢! 代码 /* Include the standard I/O library */ #include<stdio.h> /* Define main
  • 替换位于之间的字符串(Replace a string located between)
    问题 这是我的问题:在一个包含文本的文本变量中,我尝试仅删除位于两个字符串之间的逗号(实际上是[和] )。 例如,使用以下字符串: input = "The sun shines, that's fine [not, for, everyone] and if it rains, it Will Be better." output = "The sun shines, that's fine [not for everyone] and if it rains, it Will Be better." 我知道如何对整个变量使用.replace ,但是我无法在一部分变量中使用它。 这个站点上有一些主题,但是我没有针对自己的问题来利用它们,例如: 重复提取文本文件Python中两个定界符之间的行 Python使用正则表达式和replace()在某些字符之间查找子字符串替换两个引号之间的字符串 回答1 import re Variable = "The sun shines, that's fine [not, for, everyone] and if it rains, it Will Be better." Variable1 = re.sub("\[[^]]*\]", lambda x:x.group(0).replace(',',''), Variable) 首先
  • 在python 3中查找字符串中单词的出现(Finding occurrences of a word in a string in python 3)
    问题 我试图找到一个单词在一个字符串中出现的次数。 word = "dog" str1 = "the dogs barked" 我使用以下内容来计算发生次数: count = str1.count(word) 问题是我要完全匹配。 因此这句话的计数将为0。这可能吗? 回答1 如果您要提高效率: import re count = sum(1 for _ in re.finditer(r'\b%s\b' % re.escape(word), input_string)) 这不需要创建任何中间列表(与split()不同),因此可以有效地处理较大的input_string值。 它还具有正确使用标点符号的好处-它将正确返回1作为短语"Mike saw a dog."的计数"Mike saw a dog." (而无参数split()不会)。 它使用\b regex标志,该标志在单词边界上匹配( \w aka [a-zA-Z0-9_]与其他任何[a-zA-Z0-9_]之间的转换)。 如果您需要担心ASCII字符集以外的语言,则可能需要调整正则表达式以正确匹配那些语言中的非单词字符,但是对于许多应用程序来说,这可能会过于复杂,在许多其他情况下,设置unicode和/或正则表达式的区域设置标志就足够了。 回答2 您可以使用str.split()将句子转换为单词列表: a = 'the dogs
  • 中文文本预处理
     在进行文本分析时,我们一大半的时间都会花在文本预处理上,而中文和英文的预处理流程稍有不同,本文就中文文本的预处理做一个总结。 文章目录 1、文本数据准备2、去除指定无用的符号3、让文本只保留汉字4、文本中的表情符号去除5、繁体中文与简体中文转换 1、文本数据准备  使用已经有的语料库,按照Python读取文本内容的方法读取文本文件内容。此处为了一步步演示过程,所以先使用句子,最后再整合。 2、去除指定无用的符号  我们爬取到的文本有时候会有很多空格或者是其他一些无用的符号,如果保留这些符号,在分词的时候这些符号也会被分出来,就会导致分词的结果不是很好。这个时候我们就可以用replace()这个方法去掉所有你不想要的符号: 例1:去除空格 contents = ' 大家好, 欢迎一起来学习文本的空格 去除 !' print('处理前文本:'+contents) def process(our_data): #定义函数 content = our_data.replace(' ','') # 去掉文本中的空格 print('处理后文本:'+content) process(contents) 运行结果: 处理前文本: 大家好, 欢迎一起来学习文本的空格 去除 ! 处理后文本:大家好,欢迎一起来学习文本的空格去除! 例2:去除空格的同时把省略号转换为句号 contents = '
  • 在javascript中将字符串拆分为句子(Split string into sentences in javascript)
    问题 目前,我正在开发将长列拆分为短列的应用程序。 为此,我将整个文本拆分为单词,但此刻我的正则表达式也拆分了数字。 我的工作是这样的: str = "This is a long string with some numbers [125.000,55 and 140.000] and an end. This is another sentence."; sentences = str.replace(/\.+/g,'.|').replace(/\?/g,'?|').replace(/\!/g,'!|').split("|"); 结果是: Array [ "This is a long string with some numbers [125.", "000,55 and 140.", "000] and an end.", " This is another sentence." ] 理想的结果将是: Array [ "This is a long string with some numbers [125.000, 140.000] and an end.", "This is another sentence" ] 我该如何更改我的正则表达式以实现此目的? 我需要注意可能遇到的一些问题吗? 还是搜索". " , "? "和"! "就足够了? 回答1 str
  • 在PHP中将段落分解为句子(Explode a paragraph into sentences in PHP)
    问题 我一直在用 explode(".",$mystring) 将段落拆分为句子。 但是,这不包括以不同标点符号结尾的句子,例如!! ? :; 有没有一种方法可以将数组而不是单个字符用作定界符? 另外,还有使用各种标点符号进行拆分的另一种巧妙方法吗? 我试过 explode(("." || "?" || "!"),$mystring) 希望如此,但是没有成功... 回答1 你可以做: preg_split('/\.|\?|!/',$mystring); 或(更简单): preg_split('/[.?!]/',$mystring); 回答2 您可以将preg_split()与PCRE前瞻条件结合使用,以在每次出现之后拆分字符串. , ; : ? , ! ,..同时保持完整的标点符号: 代码: $subject = 'abc sdfs. def ghi; this is an.email@addre.ss! asdasdasd? abc xyz'; // split on whitespace between sentences preceded by a punctuation mark $result = preg_split('/(?<=[.?!;:])\s+/', $subject, -1, PREG_SPLIT_NO_EMPTY); print_r($result); 结果
  • 如何在Java中将CamelCase转换为人类可读的名称?(How do I convert CamelCase into human-readable names in Java?)
    问题 我想编写一种将CamelCase转换为人类可读名称的方法。 这是测试用例: public void testSplitCamelCase() { assertEquals("lowercase", splitCamelCase("lowercase")); assertEquals("Class", splitCamelCase("Class")); assertEquals("My Class", splitCamelCase("MyClass")); assertEquals("HTML", splitCamelCase("HTML")); assertEquals("PDF Loader", splitCamelCase("PDFLoader")); assertEquals("A String", splitCamelCase("AString")); assertEquals("Simple XML Parser", splitCamelCase("SimpleXMLParser")); assertEquals("GL 11 Version", splitCamelCase("GL11Version")); } 回答1 这适用于您的测试用例: static String splitCamelCase(String s) { return s.replaceAll(
  • 在Python 3中加速数百万个正则表达式的替换(Speed up millions of regex replacements in Python 3)
    问题 我有两个清单: 大约750K “句子” (长字符串)的列表我想从我的750K句子中删除的大约20K个“单词”的列表 因此,我必须循环遍历750K句子并执行大约20K替换,但是只有当我的单词实际上是“单词”并且不属于较大字符串时,才可以。 我这样做是通过预编译我的单词,使它们位于\b单词边界元字符的两侧: compiled_words = [re.compile(r'\b' + word + r'\b') for word in my20000words] 然后,我遍历我的“句子” : import re for sentence in sentences: for word in compiled_words: sentence = re.sub(word, "", sentence) # put sentence into a growing list 这个嵌套循环每秒处理大约50个句子,这很好,但是处理我所有的句子仍然需要几个小时。 有没有一种方法可以使用str.replace方法(我认为它更快),但是仍然要求替换仅在单词边界发生? 另外,有没有办法加快re.sub方法? 如果我的单词的长度大于我的句子的长度,我已经跳过re.sub略微提高了速度,但这并没有太大的改进。 我正在使用Python 3.5.2 回答1 您可以尝试做的一件事就是编译一个单一模式,例如"\b
  • 【自然语言处理基础技能(NLP)】jieba中文文本处理
    1.基本分词函数与用法 # jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode) # # jieba.cut 方法接受三个输入参数: # # 需要分词的字符串 # cut_all 参数用来控制是否采用全模式 # HMM 参数用来控制是否使用 HMM 模型 # jieba.cut_for_search 方法接受两个参数 # # 需要分词的字符串 # 是否使用 HMM 模型。 # 该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细 #jieba中文文本处理 # encoding=utf-8 import jieba #jieba.cut和jieba.cut_for_search:返回的是一个可迭代的genertor,可使用for循环获得分词后的每一个词语。 seg_list = jieba.cut("我在学习自然语言处理", cut_all=True) #print (seg_list) print("Full Mode: " + "/ ".join(seg_list)) # 全模式 seg_list = jieba.cut("我在学习自然语言处理", cut_all=False) print("Default Mode: " + "/ ".join