假设我正在对 ruby 方法定义进行词法分析:
def print_greeting(greeting = "hi")
end
Run Code Online (Sandbox Code Playgroud)
词法分析器的工作是维护状态并发出相关标记,还是应该相对愚蠢?请注意,在上面的示例中,greeting参数的默认值为"hi"。在不同的上下文中,greeting = "hi"变量赋值设置greeting为"hi"。词法分析器应该发出诸如 之类的通用标记IDENTIFIER EQUALS STRING,还是应该具有上下文感知能力并发出诸如 之类的东西PARAM_NAME EQUALS STRING?
我正在尝试为 Java重写tokenizer.py,以便我可以在 Java 中解析 Python,但我不明白源代码NL和NEWLINE源代码之间的区别。他们似乎是同一件事,但如果他们这样做了,那么哪里有两个令牌?
我想char *string根据多字符分隔符拆分 a 。我知道它strtok()用于拆分字符串,但它适用于单字符分隔符。
我想根据子字符串(例如"abc"或任何其他子字符串)拆分 char * string 。如何实现?
我有以下字符串:
char str[] = "A/USING=B)";
Run Code Online (Sandbox Code Playgroud)
我想分获得独立的A和B值与/USING=作为分隔符
我该怎么做?我知道,strtok()但它只是被一个字符分割为分隔符。
背景信息:
我有一个编程语言的愿望,知道这样做的工具,我没有任何关于如何使用它们的好例子。我真的不想使用 Flex 或 Bison,因为它们没有教授我认为创建编译器所需的抽象性。我有创建字符串、标记它们、将它们提供给充当语法和解析的文件的概念,最终创建一个实际的程序来运行该语言。问题是,我不知道如何编写标记器或解析器。我有一般的想法,但当我看到例子时我会更好地理解。如果有人可以发布一个/几个示例,那就太好了!
我的问题如下:
有人可以发布如何在 C 中编写语法标记器/解析器的示例吗?
在研究用于 Java 解析的 Antlr 3.5 语法时,注意到“ IDENTIFIER ”规则在 ANTLR 词法分析器语法中消耗了很少的关键字。词法分析器语法是
lexer grammar JavaLexer;
options {
//k=8;
language=Java;
filter=true;
//backtrack=true;
}
@lexer::header {
package java;
}
@lexer::members {
public ArrayList<String> keywordsList = new ArrayList<String>();
}
V_DECLARATION
:
( ((MODIFIERS)=>tok1=MODIFIERS WS+)? tok2=TYPE WS+ var=V_DECLARATOR WS* )
{...};
fragment
V_DECLARATOR
:
(
tok=IDENTIFIER WS* ( ',' | ';' | ASSIGN WS* V_VALUE )
)
{...};
fragment
V_VALUE
: (IDENTIFIER (DOT WS* IDENTIFIER WS* '(' | ',' | ';'))
;
MODIFIERS
:
(PUBLIC | …Run Code Online (Sandbox Code Playgroud) 我正在探索 NLTK 的一些语料库并遇到以下行为:word_tokenize() 和 words 产生不同的 words() 集。
下面是一个使用 webtext 的例子:
from nltk.corpus import webtext
Run Code Online (Sandbox Code Playgroud)
当我运行以下命令时,
len(set(word_tokenize(webtext.raw('wine.txt'))))
Run Code Online (Sandbox Code Playgroud)
我得到:3488
当我运行以下命令时,
len(set(webtext.words('wine.txt')))
Run Code Online (Sandbox Code Playgroud)
我得到:3414
我在文档中只能找到 word_tokenize 是标点符号和单词的列表。但它也说单词是标点符号和单词的列表。我想知道,这里发生了什么?他们为什么不同?
我已经尝试查看设置差异。
U = set(word_tokenize(webtext.raw('wine.txt')))
V = set(webtext.words('wine.txt'))
tok_not_in_words = U.difference(V) # in tokenize but not in words
words_not_in_tok = V.difference(U) # in words but not in tokenize
Run Code Online (Sandbox Code Playgroud)
我只能看到 word_tokenize 包含带连字符的单词,而单词将带连字符的单词分开。
任何帮助表示赞赏。谢谢!
我正在尝试使用加载的标记生成器对文本进行编码,但出现以下错误
AttributeError: 'Tokenizer' object has no attribute 'oov_token'
我添加了以下代码:
from keras.preprocessing.text import Tokenizer
from keras.preprocessing import sequence
from keras.models import Model, Input, Sequential, load_model
import pickle
import h5py
maxlen = 100
tok = open('tokenizer.pickle', 'rb')
tokenizer = pickle.load(tok)
tok.close()
model = load_model('weights.h5')
def predict():
new_text = sequence.pad_sequences((tokenizer.texts_to_sequences(['heyyyy'])), maxlen=maxlen)
prediction = model.predict(new_text,batch_size=1,verbose=2)
Run Code Online (Sandbox Code Playgroud)
问题出现在线路上tokenizer.texts_to_sequences(['heyyyy']),我不知道为什么。是不是泡菜有问题?tokenizer.texts_to_sequences与'hey'、'heyy'、 和 一起工作'heyyy'。
任何指导表示赞赏!
我正在尝试csv使用熊猫读取文件
df1 = pd.read_csv('panda_error.csv', header=None, sep=',')
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
ParserError: Error tokenizing data. C error: Expected 7 fields in line 4, saw 10
Run Code Online (Sandbox Code Playgroud)
为了重现性,这里是 csv 文件 panda_error.csv
superkingdom:Bacteria , phylum:Actinobacteria , class:Actinobacteria , order:Corynebacteriales , family:Corynebacteriaceae , genus:Corynebacterium , species:Corynebacterium efficiens 1
superkingdom:Bacteria , phylum:Proteobacteria , class:Alphaproteobacteria , order:Rhizobiales , family:Aurantimonadaceae , genus:Aurantimonas , species:Aurantimonas manganoxydans 1
superkingdom:Bacteria , phylum:Proteobacteria , subphylum:delta/epsilon subdivisions , class:Deltaproteobacteria , no rank:unclassified Deltaproteobacteria , genus:Candidatus Entotheonella 1
superkingdom:Bacteria , phylum:Proteobacteria , class:Gammaproteobacteria , order:Pseudomonadales …Run Code Online (Sandbox Code Playgroud) 我正在使用预先训练的 BERT 模型将文本标记为有意义的标记。然而,文本有很多特定的词,我不希望 BERT 模型将它们分解成词块。有什么解决办法吗?例如:
tokenizer = BertTokenizer('bert-base-uncased-vocab.txt')
tokens = tokenizer.tokenize("metastasis")
Run Code Online (Sandbox Code Playgroud)
像这样创建令牌:
['meta', '##sta', '##sis']
Run Code Online (Sandbox Code Playgroud)
但是,我想将整个单词保留为一个标记,如下所示:
['metastasis']
Run Code Online (Sandbox Code Playgroud)