Python 创建用于文本处理的模式列表

Python 创建用于文本处理的模式列表,python,regex,Python,Regex,我正在做一个简单的随机诗歌生成器程序。我有一些模型的词表,如:名词、形容词、动词等。我实现它们如下: adjective = open('lexicon/adjective.txt') noun = open('lexicon/noun.txt') verb = open('lexicon/verb.txt') I was like a tree def read_pattern(number,theme): pattern = open('poempatterns.txt').re

我正在做一个简单的随机诗歌生成器程序。我有一些模型的词表,如:名词、形容词、动词等。我实现它们如下:

adjective = open('lexicon/adjective.txt')
noun = open('lexicon/noun.txt')
verb = open('lexicon/verb.txt')
I was like a tree
def read_pattern(number,theme):
    pattern = open('poempatterns.txt').read().splitlines()
    for line in pattern:
        if line == "<pattern number="+number+" theme="+theme+">":
            while line != "</pattern>":
            #DO PARSING
文本文件的格式如下:noun.txt

我正在使用此函数从中随机选择一个单词:

def select_word(model):
    lines = model.read().splitlines()
    selectedline = random.choice(lines)
    return selectedline
我也有一个这种格式的pos标签列表,它们是我自己的语言,为了更好地理解,我只举了一些英语示例:

went go[simplepast]
gone go[pastperfect]
..
我使用这个函数来获取空白前的第一个字符串,其中包含给定的单词和邮资

def find_postag(word,postag):
    global selectedword
    zemberek = open('parse.txt')    
    for line in zemberek:
        if all(i in line for i in (word,postag)):
            selectedword = line.split(" ")[0]
            break
    return selectedword
我的想法是:我需要创建一个巨大的诗歌模式列表,以便将随机单词放入这些模式中合适的位置。例如,假设我的模式列表中有这样一句话:

I was like a *noun*
程序应该调用select_wordnoun函数,比如说它返回了tree,并产生如下结果:

adjective = open('lexicon/adjective.txt')
noun = open('lexicon/noun.txt')
verb = open('lexicon/verb.txt')
I was like a tree
def read_pattern(number,theme):
    pattern = open('poempatterns.txt').read().splitlines()
    for line in pattern:
        if line == "<pattern number="+number+" theme="+theme+">":
            while line != "</pattern>":
            #DO PARSING
假设一个单词后面有一个邮资定义对不起,我找不到合适的英文示例:

I *verb*"[Past]" a friend of mine.
现在程序应该调用select_wordverb函数来选择一个随机词,假设它现在返回主机,它应该调用find_postaghost,[pass],它将返回托管的输出应该是:

I hosted a friend of mine.
我的问题是:我不确定模式的格式。*和字符仅用于表示,我不必使用它们。我正在考虑以这种格式构建模式列表:

<pattern number=1 theme=heroic>
*noun* *nnoun* gibi
*nverb*"[Verb]+[Pos]+DH[Past]+m[A1sg]" deneme *adjective*"[Adj]-[Noun]+[A3sg]+Hm[P1sg]+[Nom] :"
</pattern>
<pattern number=2 theme=love>
(some other lines)
</pattern>
我试着这样解析它:

adjective = open('lexicon/adjective.txt')
noun = open('lexicon/noun.txt')
verb = open('lexicon/verb.txt')
I was like a tree
def read_pattern(number,theme):
    pattern = open('poempatterns.txt').read().splitlines()
    for line in pattern:
        if line == "<pattern number="+number+" theme="+theme+">":
            while line != "</pattern>":
            #DO PARSING

您对模式列表的格式有何建议,以及如何单独解析单词和它的邮资

如果您可以控制数据的结构,我建议使用更结构化的表示,如JSON

例如:

[{number: 1, theme: heroic, structure: [{type:"noun", modifier:["Past",..]},{..}]}]
pythonjson.loads中也有一个内置的json解析器

另外,我不认为:

if line == "<pattern number="+number+" theme="+theme+">": 

会有用。

如果您可以控制数据的结构,我建议使用更结构化的表示,如JSON

例如:

[{number: 1, theme: heroic, structure: [{type:"noun", modifier:["Past",..]},{..}]}]
pythonjson.loads中也有一个内置的json解析器

另外,我不认为:

if line == "<pattern number="+number+" theme="+theme+">": 

会有用。

如果你在考虑XML定义,你也必须考虑XML解析。如果你在考虑XML定义,你也必须考虑XML解析。