首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NLTK语句的基因组表示

NLTK语句的基因组表示
EN

Stack Overflow用户
提问于 2021-03-03 02:19:30
回答 1查看 52关注 0票数 0

给定NLTK语法,我如何使用整数数组来表示句子?

我正在使用NLTK从特定的语法生成一些句子。我想生成一个整数数组来表示生成的句子的基因组(表型)。

有了整数的表示,我将在遗传算法中进化基因组,执行一些变异以获得更好的句子。

例如,

代码语言:javascript
复制
from nltk import CFG
from nltk.parse.generate import generate, demo_grammar

g = CFG.fromstring(demo_grammar)
sentence = next(generate(g, n=1))

print(sentence) # ex: ['the', 'man', 'saw', 'the', 'park']

convert_to_genotype(sentence) # returns [253, 69, 221, 97, 190, 254, 67, 137, 95, 72, 54, 232, 11, 136] for example.

如何创建convert_to_genotype函数?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-09 21:13:29

经过一些研究,我创建了一个为给定基因组创建表型的实现。这就是我正在寻找的,用来自语法的规则创建的进化我的个体。

代码语言:javascript
复制
import nltk
from nltk import CFG

GRAMMAR = CFG.fromstring("""
string -> letter | letter string
letter -> vowel | consonant | char
char   -> ' '|'!'|'?'|','|'.'

vowel       -> lower_vowel | upper_vowel
lower_vowel -> 'a'|'e'|'o'|'i'|'u'
upper_vowel -> 'A'|'E'|'I'|'O'|'U'

consonant       -> lower_consonant | upper_consonant
lower_consonant -> 'b'|'c'|'d'|'f'|'g'|'h'|'j'|'k'|'l'|'m'|'n'|'p'|'q'|'r'|'s'|'t'|'v'|'w'|'x'|'y'|'z'
upper_consonant -> 'B'|'C'|'D'|'F'|'G'|'H'|'J'|'K'|'L'|'M'|'N'|'P'|'Q'|'R'|'S'|'T'|'V'|'W'|'X'|'Y'|'Z'
""")

def genome_to_grammar(array):
  sb = []
  stack = [GRAMMAR.start()]
  index = 0
  wraps = 0

  while stack:
    symbol = stack.pop()
    if isinstance(symbol, str):
      sb.append(symbol)
    else:
      rules = [i for i in GRAMMAR.productions() if i.lhs().symbol() == symbol.symbol()]
      rule_index = 0
      if len(rules) > 1:
        rule_index = array[index] % len(rules)
        index += 1
        if index >= len(array):
          index = 0
          wraps += 1
          if wraps > 10:
            return None
      rule = rules[rule_index]
      for production in reversed(rule.rhs()):
        stack.append(production)

  return ''.join(sb)

genome = [253, 69, 221, 97, 190, 254, 67, 137, 95, 72, 54, 232, 11, 136]
print(genome_to_grammar(genome))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66444961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档