我希望能夠判斷句子在python中是否真的有意義。例如在python中按句子結構對文本進行分類
Hello, how are you today? --> Correct
Hello, are today are how --> Incorrect
到目前爲止,我有這個代碼執行以下操作:
1 - 獲取從nltk.browns語料庫20 000句。
2 - 混淆了最後的10成000句的話(不正確的數據)
3 - 標籤使用斯坦福POS標註器
from nltk.corpus import brown
from nltk.tokenize import sent_tokenize, word_tokenize
from nltk.classify import accuracy
from nltk.tag import StanfordPOSTagger
from nltk import pos_tag
import string
import random
PUNC = [x for x in string.punctuation] + ["''", "``"]
def download_data(target_path):
brown_data = brown.sents()
i = 0; n = 0
with open(target_path, 'w') as data_file:
while n < 20000:
for sent in sent_tokenize(' '.join(brown_data[i])):
updated_list = [x for x in word_tokenize(sent) if x not in PUNC]
if n > 10000:
random.shuffle(updated_list)
sent = ' '.join(updated_list) + '\n'
if sent != '\n':
data_file.write(sent)
n += 1
i += 1
def get_data(data_path):
with open(data_path, 'r') as data_file:
return [x for x in data_file.readlines()]
def parse_data(data, tagger):
parsed_data = []
for i in range(len(data)):
if i > 10000:
parsed_data.append((tagger.tag(word_tokenize(data[i].replace('\n', ''))), False))
else:
parsed_data.append((tagger.tag(word_tokenize(data[i].replace('\n', ''))), True))
random.shuffle(parsed_data)
return parsed_data[:15000], parsed_data[15000:]
if __name__ == '__main__':
data_path = 'data.txt'
stanford_jar_path = 'stanford-postagger.jar'
stanford_model_path = 'models/english-bidirectional-distsim.tagger'
tagger = StanfordPOSTagger(model_filename=stanford_model_path,
path_to_jar=stanford_jar_path)
#download_data(data_path)
all_data = get_data(data_path)
train_data, test_data = parse_data(all_data, tagger)
所以,我怎麼能培養例如分類,分類所有句子根據我提供的數據,新文本是正確的還是不正確的?
如果有人有更好的建議,我也打開。
從技術上講,正確地解決這些問題的方法當然是(a)根據您感興趣的領域的文本(某種RNN/LSTM,如果您想進行尖端工作)來訓練語言模型,然後(b)針對已知的好壞句子集合建立可接受的概率截止點,最後(c)使用模型爲您提供的新句子的句子概率,以分離您的二元情況。類似於現有的答案,您應該首先確定這是否值得,但是,使用快速而簡潔的二元或三元模型。 – fnl