这个问题很具挑战性.我们的应用程序允许用户在主页上发布新闻.该新闻是通过允许HTML的富文本编辑器输入的.在主页上,我们只想显示新闻项的截断摘要.
例如,这是我们正在显示的全文,包括HTML
为了在办公室,厨房里腾出更多的空间,我把所有随机的杯子拿出来放在午餐室的桌子上.除非你对1992年的Cheyenne Courier杯子或者1997年的BC Tel Advanced Communications杯子的所有权感到强烈,否则它们将放在一个盒子里并捐赠给比我们更需要杯子的办公室.
我们希望将新闻项目修剪为250个字符,但不包括HTML.
我们用于修剪的方法目前包括HTML,这导致一些HTML重大的新闻帖子被大大截断.
例如,如果上面的例子包含大量的HTML,它可能看起来像这样:
为了在办公室,厨房里腾出更多的空间,我已经拉了......
这不是我们想要的.
有没有人有一种标记HTML标签的方法,以保持字符串中的位置,对字符串执行长度检查和/或修剪,并恢复字符串中旧的位置的HTML?
我希望将搜索查询标记为类似于Google的操作方式.例如,如果我有以下搜索查询:
the quick "brown fox" jumps over the "lazy dog"
Run Code Online (Sandbox Code Playgroud)
我想要一个包含以下标记的字符串数组:
the
quick
brown fox
jumps
over
the
lazy dog
Run Code Online (Sandbox Code Playgroud)
如您所见,标记用双引号保留空格.
我正在寻找一些如何在C#中执行此操作的示例,最好不使用正则表达式,但是如果这样做最有意义并且性能最高,那就这样吧.
此外,我想知道如何扩展它来处理其他特殊字符,例如,在一个术语的前面放置一个强制从搜索查询中排除等等.
我需要一个tokenizer,它给出一个字符串,其中包含单词之间的任意空格,将创建一个没有空子字符串的单词数组.
例如,给定一个字符串:
" I dont know what you mean by glory Alice said."
Run Code Online (Sandbox Code Playgroud)
我用:
str2.split(" ")
Run Code Online (Sandbox Code Playgroud)
这也返回空子字符串:
["", "I", "dont", "know", "what", "you", "mean", "by", "glory", "", "Alice", "said."]
Run Code Online (Sandbox Code Playgroud)
如何从数组中过滤掉空字符串?
我有一些"标记化"模板,例如(我称之为双括号之间的标记):
var template1 = "{{TOKEN1}} is a {{TOKEN2}} and it has some {{TOKEN3}}";
Run Code Online (Sandbox Code Playgroud)
我想从这句话中提取一个数组,以便有类似的东西:
Array("{{TOKEN1}}",
" is a ",
"{{TOKEN2}}",
" and it has some ",
"{{TOKEN3}}");
Run Code Online (Sandbox Code Playgroud)
我已尝试使用以下Regex代码实现此目的:
Regex r = new Regex(@"({{[^\}]*}})");
var n = r.Split(template1);
Run Code Online (Sandbox Code Playgroud)
结果是:
Array("",
"{{TOKEN1}}",
" is a ",
"{{TOKEN2}}",
" and it has some ",
"{{TOKEN3}}",
"");
Run Code Online (Sandbox Code Playgroud)
第一个问题是我无法从句子中恢复令牌.我只是通过在Regex表达式上添加括号来解决这个问题,即使我不确定为什么它会解决这个问题.
我目前面临的问题是当模板上的第一个和/或最后一个术语是"标记"时,数组开头和/或结尾的额外空术语.为什么会这样?我做错了什么,或者我应该经常检查这两个位置是否空虚?
在我的代码中,我需要知道哪个术语来自一个令牌,哪个是模板上的固定位置.在这个解决方案中,我将检查每个数组的位置,以"{{"和"}}"开头的字符串,我不认为这是最好的可能性.所以,如果有人想出一个更好的解决方案来打破这些事情,我会很高兴知道!
谢谢!
编辑:根据要求,我将发布一个简单的例子,为什么我需要对令牌和文本进行区分.
public abstract class TextParts { }
public class TextToken : TextParts { }
public class TextConstant : …Run Code Online (Sandbox Code Playgroud) 我正在建立一个节点/快速后端.我想创建一个只能与我的reactjs前端(私有API)一起使用的API.
想象一下,如果这是一个电子商务网站,我的用户将浏览产品,然后选择购买什么,并在订购时可能会或可能不会登录.
确保我的API仅适用于reactjs前端的最佳做法是什么?
当用户决定登录或者他们仍然是客人时会发生什么?
有没有办法在C++中用多个分隔符标记字符串?在C#中,我会做到:
string[] tokens = "adsl, dkks; dk".Split(new [] { ",", " ", ";" }, StringSplitOptions.RemoveEmpty);
Run Code Online (Sandbox Code Playgroud) 我strtok()在c中使用来解析csv字符串.首先我将它标记为只是找出有多少令牌,这样我就可以分配一个正确大小的字符串.然后我使用上次用于标记化的相同变量.每次我第二次这样做虽然它strtok(NULL, ",")返回,NULL即使还有更多的令牌需要解析.谁能告诉我我做错了什么?
char* tok;
int count = 0;
tok = strtok(buffer, ",");
while(tok != NULL) {
count++;
tok = strtok(NULL, ",");
}
//allocate array
tok = strtok(buffer, ",");
while(tok != NULL) {
//do other stuff
tok = strtok(NULL, ",");
}
Run Code Online (Sandbox Code Playgroud)
所以在第二个while循环中它总是在找到第一个标记后结束,即使有更多的标记.有人知道我做错了什么吗?
我有一个字符串,正确的语法是正则表达式^([0-9]+[abc])+$.所以有效字符串的例子是:'1a2b'或'00333b1119a555a0c'
为清楚起见,字符串是(值,字母)对的列表,并且顺序很重要.我坚持使用输入字符串,所以我不能改变它.虽然使用上面的正则表达式来测试正确的语法似乎很容易,但我正在尝试考虑PHP中最有效的方法将兼容字符串转换为可用的数组,如下所示:
输入:
'00333b1119a555a0c'
Run Code Online (Sandbox Code Playgroud)
输出:
array (
0 => array('num' => '00333', 'let' => 'b'),
1 => array('num' => '1119', 'let' => 'a'),
2 => array('num' => '555', 'let' => 'a'),
3 => array('num' => '0', 'let' => 'c')
)
Run Code Online (Sandbox Code Playgroud)
我在使用preg_match方面遇到了困难.例如,这没有给出预期的结果,意图是在EITHER\d +上贪婪匹配(并保存)OR [abc](并保存),重复直到到达字符串结尾.
$text = '00b000b0b';
$out = array();
$x = preg_match("/^(?:(\d+|[abc]))+$/", $text, $out);
Run Code Online (Sandbox Code Playgroud)
这也不起作用,这里的意图是在\ d + [abc]上贪婪匹配(并保存这些),重复直到字符串到达结束,然后将它们分成数字和字母.
$text = '00b000b0b';
$out = array();
$x = preg_match("/^(?:\d+[abc])+$/", $text, $out);
Run Code Online (Sandbox Code Playgroud)
如果使用需要遍历结果2项在时间我计划检查语法作为的preg_match的一部分,然后使用的preg_match输出到贪婪-匹配"块"(或使用使preg_split保持分隔符如果),然后for (...; i+=2)到在他们的对中提取值字母.
但我似乎无法让基本的preg_split()或preg_match()方法顺利运行,更不用说探索是否有"整洁"或更有效的方法.
默认情况下,(德语)spacy 分词器不会按斜线、下划线或星号分割,这正是我所需要的(因此“der/die”会生成单个标记)。
然而,它确实在括号上拆分,因此“dies(und)das”被拆分为 5 个标记。是否有一种(简单)方法告诉默认标记器也不在括号上拆分,括号两边都由字母括起来,没有空格?
为分词器定义的括号上的分割到底是如何定义的?
有没有一种方法可以将 Hugging Face Transformer 嵌入转换回文本?
假设我使用 Hugging Face 的ClipTextModel使用以下方法创建了文本嵌入:
import torch
from transformers import CLIPTokenizer, CLIPTextModel
class_list = [
"i love going home and playing with my wife and kids",
"i love going home",
"playing with my wife and kids",
"family",
"war",
"writing",
]
model = CLIPTextModel.from_pretrained("openai/clip-vit-large-patch14")
tokenizer = CLIPTokenizer.from_pretrained("openai/clip-vit-large-patch14")
inputs = tokenizer(class_list, padding=True, return_tensors="pt")
outputs = model(**inputs)
hidden_state = outputs.last_hidden_state
embeddings = outputs.pooler_output
Run Code Online (Sandbox Code Playgroud)
我的嵌入位于变量“embeddings”中。问题: