在keras标记器中包含标点符号

在keras标记器中包含标点符号,keras,tokenize,Keras,Tokenize,有没有办法在keras标记器中包含标点符号? 我想有一个转变 从 到 如何实现这一点?如果您对文本进行一些预处理,这是可能的 首先,您要确保标点符号没有被标记器过滤掉。您可以从文档中看到,标记器在初始化时接受一个过滤器参数。您可以使用要筛选的字符集替换默认值,并排除要在索引中包含的字符集 第二部分是确保标点符号被识别为自己的标记。如果将示例语句标记化,结果将以“cold.”作为标记,而不是“cold”和“.”。你需要的是单词和标点符号之间的分隔符。一种简单的方法是用空格+标点替换文本中的标点符号

有没有办法在keras标记器中包含标点符号?
我想有一个转变


如何实现这一点?

如果您对文本进行一些预处理,这是可能的

首先,您要确保标点符号没有被标记器过滤掉。您可以从文档中看到,标记器在初始化时接受一个过滤器参数。您可以使用要筛选的字符集替换默认值,并排除要在索引中包含的字符集

第二部分是确保标点符号被识别为自己的标记。如果将示例语句标记化,结果将以“cold.”作为标记,而不是“cold”和“.”。你需要的是单词和标点符号之间的分隔符。一种简单的方法是用空格+标点替换文本中的标点符号

以下代码满足您的要求:

from keras.preprocessing.text import Tokenizer

t = Tokenizer(filters='!"#$%&()*+,-/:;<=>?@[\\]^_`{|}~\t\n') # all without .
text = "Tomorrow will be cold."
text = text.replace(".", " .")
t.fit_on_texts([text])
print(t.word_index)
来自keras.preprocessing.text导入标记器的

t=Tokenizer(filters='!“#$%&()*+,-/:;?@[\\]^{124;}~\ t\n')全部不带。
text=“明天会很冷。”
text=text.replace(“.,”)
t、 在文本上安装文本([文本])
打印(t.word\u索引)
->打印:{'will':2,'be':3,'cold':4,'明天':1,':5}


替换逻辑可以以更智能的方式完成(例如,如果您想捕获所有标点符号,可以使用正则表达式),但您得到了要点。

一个通用解决方案,受所提出的解决方案的启发,使用正则表达式替换一组标点符号。代码如下:

from keras.preprocessing.text import Tokenizer
import re

to_exclude = '!"#$%&()*+-/:;<=>@[\\]^_`{|}~\t\n'
to_tokenize = '.,:;!?'
t = Tokenizer(filters=to_exclude) # all without .
text = "Tomorrow, will be. cold?"
text = re.sub(r'(['+to_tokenize+'])', r' \1 ', text)
t.fit_on_texts([text])
print(t.word_index) # {'tomorrow': 1, ',': 2, 'will': 3, 'be': 4, '.': 5, 'cold': 6, '?': 7}
来自keras.preprocessing.text导入标记器的

进口稀土
要排除='!“#$%&()*+-/:@[\\]^{{124;}~\ t\n'
要将_标记化=',:;!?'
t=标记器(过滤器=排除)#全部不带。
text=“明天会冷吗?”
text=re.sub(r'(['+to_tokenize+']),r'\1',text)
t、 在文本上安装文本([文本])
print(t.word_index){明天:1,',':2,'will':3,'be':4,':5,'cold':6,'?':7}

Thnak you black plant。这是一个微不足道的解决方案,对我来说可能很好。我想用正则表达式regex=r'(\w+|[\',])而不是空格来分隔文本到单词序列(keras标记器函数)上的单词。
from keras.preprocessing.text import Tokenizer

t = Tokenizer(filters='!"#$%&()*+,-/:;<=>?@[\\]^_`{|}~\t\n') # all without .
text = "Tomorrow will be cold."
text = text.replace(".", " .")
t.fit_on_texts([text])
print(t.word_index)
from keras.preprocessing.text import Tokenizer
import re

to_exclude = '!"#$%&()*+-/:;<=>@[\\]^_`{|}~\t\n'
to_tokenize = '.,:;!?'
t = Tokenizer(filters=to_exclude) # all without .
text = "Tomorrow, will be. cold?"
text = re.sub(r'(['+to_tokenize+'])', r' \1 ', text)
t.fit_on_texts([text])
print(t.word_index) # {'tomorrow': 1, ',': 2, 'will': 3, 'be': 4, '.': 5, 'cold': 6, '?': 7}