用c#函数的函数代币化的数学表达式
我认为这很容易找到,但是我还没有成功. 我需要能够使以下表达式 (4 + 5) + myfunc('两个单词',3,5) 进入 ( 4 + 5 + myfunc ( 'two words' , 3 , 5 ) 看来这可能是一个普遍的需求,但是我无法在此处找到任何好的文档.这是我可以使用Regex做的吗?有人知道这样做的现有方法吗? 我正在使用C#,但是如果您有另一种语言的答案,请不要害羞. 预先感谢. 解决方案 如果您正在研究一个强大而有力的解决方案,则应确定地研究词汇分析仪(如ANTLR).但是,如果您需要的只是像您提供的简单表达式的象征化,您可以很容易地实现此结果: // TODO Refactor and optimize this function public IList TokenizeExpression(string expr) { // TODO
6 2024-04-26
编程技术问答社区
解析自定义过滤器语法的最佳方法
我有一个程序,该程序允许用户在DataGridView的列标题中的文本框中输入过滤器. 然后将此文本解析为过滤器操作列表. 目前,我将字符串归为弦,然后在狩猎式前面构建列表. 我可以用哪些荒原模式摆脱巨大的consruct? 我还可以采取其他行动来改进设计吗? 在当前状态下,很难添加对另一个操作员,数据类型或构建其他内容的支持.假设我需要用构建表达式替换过滤器列表(很快将是这种情况)或在其中构建SQL. filtersyntax 过滤器遵循此语法,对字符串,数字和数据量有效: 揽胜器 Lowerlimit .. upperlimit 29..52将被解析为" x> = 29"和" x soulththan .. 上限 .. 52将被解析为" x 更大的 Lowerlimit .. 29 ..将被解析为" x> 29" 通配符 *someText*在sql 中等于x 字符串文字 '运算符,
18 2024-04-23
编程技术问答社区
如何在 spacy 中标记新词汇?
我正在使用spacy从依赖性解析中获取好处,我在使Spcay令牌化的标记化时遇到了麻烦. 这是我的代码: nlp = spacy.load("en_core_web_md") nlp.vocab['bone morphogenetic protein (BMP)-2'] nlp.tokenizer = Tokenizer(nlp.vocab) text = 'This study describes the distributions of bone morphogenetic protein (BMP)-2 as well as mRNAs for BMP receptor type IB (BMPRIB).' doc = nlp(text) print([(token.text,token.tag_) for token in doc]) 输出: [('This', 'DT'), ('study', 'NN'), ('describes', 'VBZ'),
48 2024-04-23
编程技术问答社区
spacy 如何将标签标记化为一个整体?
在包含主题标签的句子中,例如推文,Spacy的Tokenizer将主题标签分为两个令牌: import spacy nlp = spacy.load('en') doc = nlp(u'This is a #sentence.') [t for t in doc] 输出: [This, is, a, #, sentence, .] 我想拥有如下的标签标签,这是可能的吗? [This, is, a, #sentence, .] 解决方案 您可以执行一些前和填充字符串操作,这将使您绕过基于"#"的令牌化,并且易于实现.例如 > >>> import re > >>> import spacy > >>> nlp = spacy.load('en') > >>> sentence = u'This is my twitter update #MyTopic' > >>> parsed = nlp(sentence) > >>> [token.text fo
22 2024-04-23
编程技术问答社区
在 Solr 的不同字段中搜索不同的令牌
我想在apache solr 3.6中编写自定义令牌,它将尝试识别某些类型的令牌,并取决于其在不同字段上的类型搜索. 例如,如果搜索是2in screw,我将拥有自定义令牌识别2in是指一个值和度量单位,并且screw是指类别. 然后,我想将搜索限制为"量"字段中的" in"和类别字段中的"螺丝". 我意识到,这可以在外部分解术语,然后形成查询并将其传递到Solr中,但是我想知道,完全使用Solr Analyzers来完成这是什么最好的方法. 请让我知道,如果您认为这是应该完成的,或者最好先用外部令牌准备数据.感谢您的建议! 解决方案 我认为您应该做这两个: 外部执行此操作,然后发送正确的URL 或在solr中这样做,但在查询解析器中,而不是令牌
22 2024-04-23
编程技术问答社区
是否有办法在使用 Solr 同义词的同时提高原始术语的性能?
例如,我有同义词 笔记本电脑,上网本,笔记本 在index_synonynys.txt 中 当用户搜索上网本时,我想更多地增强原始文本,然后通过同义词扩展? 有没有方法在同义词范围内指定? 例如,使用原始术语两次,以便他的TF更大 据我所知, 解决方案 无法使用现有的同义词filterfactory来执行此操作.但是以下是您可以用来获得此行为的技巧. 假设您的字段称为title.创建另一个字段,即title_synonyms的副本.现在,确保仅将同义词范围用作title_synonyms的分析仪(您可以通过为两个字段使用不同的字段类型来做到这一点 - 例如text和text_synonyms).在这两个字段中搜索,但比title_synonyms> title_synonyms. 更高 这是示例字段类型定义:
10 2024-04-23
编程技术问答社区
WhitespaceTokenizerFactory 与 StandardTokenizerFactory 的区别
我是Solr的新手.通过阅读Solr的Wiki,我不了解WhitespaceTokenizerFactory和StandardTokenizerFactory之间的差异.他们的真正区别是什么? 解决方案 他们在将分析的文本分为代币的方式上有所不同. StandardTokenizer 根据以下内容(取自Lucene Javadoc): 在标点符号上拆分单词,删除标点符号. 但是,一个不遵循的点被认为是一部分 一个令牌. 在连字符上分配单词,除非 令牌,在这种情况下,整体令牌被解释为产品 数字,不分开. 识别电子邮件地址和互联网 主机名作为一个令牌. whitespaceTokenizer 是基于空格字符的: whitespaceTokenizer是一个令牌,在空格上分配文本.非Whitespace字符的相邻序列形成令牌. 您应该选择最适合您应用程序的令牌仪.无论如何,您都必须使用相同的分析仪/标记器进行索引和搜索!
22 2024-04-23
编程技术问答社区
Solr 通配符搜索结果不正确
进行通配符查询时,我会有一些意外的结果.我正在使用Solr 6.6.0. solr UI内部的Edismax处理程序.以下查询返回结果是没有通配符的预期 - 名字:詹姆斯,但是当我添加通配符时,找不到结果.
28 2024-04-23
编程技术问答社区
SuperPower:仅在开始行时将字符串与令牌匹配
当超级大国中的令牌化时,仅当字符串是行中的第一件事时,如何匹配字符串(注意:这与 this )? 例如,假设我的语言只有以下4个字符(',':',','x','y'),每个字符都是令牌.还有一个"标头"令牌,可以捕获以下正则表达式模式的情况/^[xy]+:/(XS和YS的任何数量,然后是结肠,只有在它们启动线路时). 这是一个用于测试的快速类(第四测试案例失败): using System; using Superpower; using Superpower.Parsers; using Superpower.Tokenizers; public enum Tokens { Space, Colon, Header, X, Y } public class XYTokenizer { static void Main(string[] args) { Test("X", Tokens.X); Test("XY", T
18 2024-04-22
编程技术问答社区
C++中的字符串标记器,允许多个分隔符
有没有办法用多个分离器将C ++中的字符串化?在C#中,我会做: string[] tokens = "adsl, dkks; dk".Split(new [] { ",", " ", ";" }, StringSplitOptions.RemoveEmpty); 解决方案 使用boost :: tokenizer.它支持多个分离器. 实际上,您甚至不需要Boost :: Tokenizer.如果您想要的只是拆分,请使用boost :: split.该文档有一个示例: doc/libs/1_42_0/doc/html/string_algo/usage.html#id1718906 其他解决方案 类似的事情会做: void tokenize_string(const std::string &original_string, const std::string &delimiters, std::vector *tokens) {
14 2024-04-19
编程技术问答社区
当传递多个多字符分隔符时,String.Split方法如何确定分隔符的优先顺序?
如果您有此代码: "......".Split(new String[]{"...", ".."}, StringSplitOptions.None); 生成的数组元素是: 1. "" 2. "" 3. "" 现在,如果您扭转了分离器的顺序, "......".Split(new String[]{"..", "..."}, StringSplitOptions.None); 生成的数组元素是: 1. "" 2. "" 3. "" 4. "" 从这两个示例中,我倾向于得出结论,分裂方法在遍历阵列的每个元素从左到右都递归象征. 但是,一旦我们将包含字母数字字符的分离器插入方程式中,很明显上述理论是错误的. "5.x.7".Split(new String[]{".x", "x."}, StringSplitOptions.None) 导致:1. "5" 2. ".7" "5.x.7".Split(new
10 2024-04-19
编程技术问答社区
类似谷歌的搜索查询标记化和字符串分割功能
我希望将搜索查询类似于Google的方式.例如,如果我有以下搜索查询: the quick "brown fox" jumps over the "lazy dog" 我想拥有一个带有以下令牌的字符串数组: the quick brown fox jumps over the lazy dog 您可以看到,令牌以双引号保留空间. 我正在寻找一些我可以在C#中做到这一点的示例,最好是不使用正则表达式,但是如果这是最有意义的,那么它将是最大的表现,那就这样. 我也想知道如何将其扩展以处理其他特殊字符,例如,将A-放在术语前,将搜索查询排除在外. . 解决方案 到目前为止,这看起来像是Regex的好候选人.如果它变得更加复杂,那么可能需要一个更复杂的令牌方案,但是除非有必要,否则您应该避免使用该路线,因为它的工作量要大得多. (另一方面,对于复杂的模式,正则迅速变成狗,也应避免). . 此正则应该解决您的问题: ("[^"]+"|\w+)
6 2024-04-18
编程技术问答社区
超能力:用解析器匹配一个字符串,只有当它开始一个行的时候
在超级大国中解析时,只有在行中的第一件事时,如何匹配字符串? 例如,我需要与" A:Hello Goodbye \ n"中的A结肠匹配,但在"再见A:Hello \ n" 中不匹配. 解决方案 使用您的示例对此的定义: public readonly static TokenListParser ActorParser = from name in NameParser from colon in Token.EqualTo(Tokens.Colon) from text in TextParser select new Node { Actor = name + colon.ToStringValue(), Text = text }; public readonly static TokenListParser NodeParser =
12 2024-04-17
编程技术问答社区
根据分隔符拆分一串整数并转换为int类型?
我正在编写一个程序,该程序在输入时会列出数字对,我想将这些有序对分开并将它们转换为数组中的整数. 文件可能是这样: 0 1 1 4 9 11 12 45 我想编写一个输入该行的函数(假定已在程序的另一部分中终止为null),将数字分配在空间上,然后将它们存储在大小二的整数阵列中: int *store = malloc(2 * sizeof(store)); 我已经研究了strtok,但是我正确地说这不是线程安全,因此在这种情况下不是最好的选择?另外,它不会将数字转换为整数,这也是该功能还需要具有的东西. 我该如何解决这个问题? 解决方案 如果要读取未知数的有序对,将有多种方法来处理.如评论中指出的那样,如果您可以保证 您将始终每行有2个智能者,则可能是读取/将值转换为整数的最简单方法是fscanf (当您在每行上具有完全相同的数据格式时,我会推荐fgets和sscanf的fscanf 次,然后才是简化示例) 当您有未知数的元素要读取时,
12 2024-04-10
编程技术问答社区
删除char数组中的第一个标记,其余的保留在C中
所以如果我在C中有以下char数组: "a b c" // where "a", "b", and "c" can be char arrays of any length and the // space between them can be of any length 如何删除" a"令牌,但将其余的" b c"存储在炭指针中? 到目前为止,我已经实施了以下方法,该方法不起作用: char* removeAFromABC(char* a, char* abc) { char* abcWithoutA[MAXIMUM_LINE_LENGTH + 1]; int numberOfCharsInA = strlen(a); strcpy(abcWithoutA, (abc + numberOfCharsInA)); return abcWithoutA; } 解决方案 海报
4 2024-04-10
编程技术问答社区
c语言中的字符串标记器
以下代码将使用空格即""和一个完整的停止,即"."分解字符串命令.如果我想使用空间和完整停止的出现(同时)而不是每个人自己,例如像:"你好"这样的命令将被分成部分(忽略报价) [你好] [你今天好吗] char *token2 = strtok(command, " ."); 解决方案 您可以使用strstr轻松地完成操作: char *strstrtok(char *str, char *delim) { static char *prev; if (!str) str = prev; if (str) { char *end = strstr(str, delim); if (end) { prev = end + strlen(delim); *end = 0; } else { prev = 0; }
4 2024-04-09
编程技术问答社区
不使用strtok()的字符串标记器
我正在不使用strtok()的情况下编写字符串令牌.这主要是为了我自己的改善和对指针的更深刻理解.我想我几乎有它,但是我一直在收到以下错误: myToc.c:25 warning: assignment makes integer from pointer without a cast myToc.c:35 (same as above) myToc.c:44 error: invalid type argument of 'unary *' (have 'int') 我正在做的是通过发送到方法的字符串,找到每个定界符,然后用" \ 0"替换. " PTR"阵列应该对分离的子字符串有指针.这就是我到目前为止的. #include void myToc(char * str){ int spcCount = 0; int ptrIndex = 0; int n = strlen(str); for(int i = 0; i
10 2024-04-08
编程技术问答社区
如何在C语言中解析一个字符串中的标记?
如何从输入字符串中解析令牌. 例如: char *aString = "Hello world". 我希望输出为: "你好""世界" 解决方案 您将要使用strtok - 其他解决方案 看看其他解决方案 strtok是一个简单的答案,但是您真正需要的是一个正确执行的LEXER.考虑以下内容: " Hello"和" World"之间有一个或两个空间? 实际上可能是任何数量的空格? 这可能包括垂直空格(\ n,\ f,\ v)或只是水平(\ s,\ t,\ r)? 可以包括任何Unicode Whitespace字符吗? 如果单词(" Hello,World")之间有标点符号,则标点符号是单独的令牌,是" Hello"," Hello"的一部分,还是被忽略? 如您所见,编写合适的lexer并不简单,strtok不是合适的lexer. 其他解决方案可能是单个角色状态机,可以确定您需要的东西,也可以是基于正则的解决方案,它使定位单词与差距更概
6 2024-04-08
编程技术问答社区
在C语言中得到一个字符串的最后一个标记
我想做的是一个输入字符串,我将不知道它的大小或令牌数量,能够打印其最后一个令牌. e.x.: char* s = "some/very/big/string"; char* token; const char delimiter[2] = "/"; token = strtok(s, delimiter); while (token != NULL) { printf("%s\n", token); token = strtok(NULL, delimiter); } return token; 我希望我的返回是 字符串 但是我得到的是(null).有解决方法吗?我已经搜索了网络,似乎找不到答案.至少对于C编程语言. 解决方案 如果您以特定字符为单位,即'/'在您的示例中,您无需完全引导字符串:call strrchr 查找最后一个'/'的位置,然后将1添加到生成的指针以跳过定界线,如下: char *s = "some/
20 2024-04-08
编程技术问答社区
C代码器(当字段缺失时,它也会返回空值,耶!)。
另请参见:这是C的好substr()吗? strtok()和朋友跳过空字段,我不知道该怎么说不要跳过,而是在这种情况下空返回. 我可以看到的大多数引物的类似行为,甚至没有让我开始sscanf()(但后来它从未说过它会在空旷的领域起作用). 我一直在滚动,也感到困倦,所以在这里进行评论: char* substr(const char* text, int nStartingPos, int nRun) { char* emptyString = strdup(""); /* C'mon! This cannot fail */ if(text == NULL) return emptyString; int textLen = strlen(text); --nStartingPos; if((nStartingPos
8 2024-04-07
编程技术问答社区