Мне удалось решить эту проблему в Visual Studio 2010, VB.net (ASP.NET) 4.0.
Во время работы мастера модели сущностей вы сможете увидеть строку подключения сущности. Оттуда вы можете скопировать и вставить в строку подключения.
Единственное, чего мне не хватало, это «App_Code». в строке соединений.
entityBuilder.Metadata = "res://*/App_Code.Model.csdl|res://*/App_Code.Model.ssdl|res://*/App_Code.Model.msl"
Чтобы сгенерировать случайный текст, U необходимо использовать код Цепи Маркова
для этого: отсюда
import random
class Markov(object):
def __init__(self, open_file):
self.cache = {}
self.open_file = open_file
self.words = self.file_to_words()
self.word_size = len(self.words)
self.database()
def file_to_words(self):
self.open_file.seek(0)
data = self.open_file.read()
words = data.split()
return words
def triples(self):
""" Generates triples from the given data string. So if our string were
"What a lovely day", we'd generate (What, a, lovely) and then
(a, lovely, day).
"""
if len(self.words) < 3:
return
for i in range(len(self.words) - 2):
yield (self.words[i], self.words[i+1], self.words[i+2])
def database(self):
for w1, w2, w3 in self.triples():
key = (w1, w2)
if key in self.cache:
self.cache[key].append(w3)
else:
self.cache[key] = [w3]
def generate_markov_text(self, size=25):
seed = random.randint(0, self.word_size-3)
seed_word, next_word = self.words[seed], self.words[seed+1]
w1, w2 = seed_word, next_word
gen_words = []
for i in xrange(size):
gen_words.append(w1)
w1, w2 = w2, random.choice(self.cache[(w1, w2)])
gen_words.append(w2)
return ' '.join(gen_words)
Объяснение: Генерация псевдослучайного текста с цепями Маркова с использованием Python
Скорее всего, ваш образец слишком мал. Я не знаю, как именно nltk строит свою модель триграммы, но это обычная практика, когда начало и конец предложений каким-то образом обрабатываются. Поскольку в вашем корпусе есть только одно начало предложения, это может быть причиной того, что каждое предложение имеет одинаковое начало.
Вы уверены, что использование word_tokenize
является правильным подходом?
На этой странице групп Google есть пример:
>>> import nltk
>>> text = nltk.Text(nltk.corpus.brown.words()) # Get text from brown
>>> text.generate()
Но я никогда не использовал nltk, поэтому не могу сказать, работает ли это так, как вы хотите.
Возможно, вы сможете случайным образом отсортировать массив токенов перед генерацией предложения.
Вы должны «обучать» марковскую модель с помощью нескольких последовательностей, чтобы вы также точно выбирали вероятности начального состояния (называемые «пи» на языке Маркова). Если вы используете одну последовательность, вы всегда будете начинать в одном и том же состоянии.
В случае с 1984 Оруэлла вы захотите сначала использовать токенизацию предложений (NLTK очень хорош в этом), а затем токенизацию слов (с получением списка списки токенов, а не просто один список токенов), а затем передать каждое предложение отдельно в модель Маркова. Это позволит ему правильно моделировать запуски последовательности, вместо того, чтобы останавливаться на одном способе запуска каждой последовательности.