小编Tom*_*mmi的帖子

redis-py和hgetall行为

我玩烧瓶微框架,并希望在redis中缓存一些统计数据.假设我有这个词:

mydict = {}
mydict["test"] = "test11"
Run Code Online (Sandbox Code Playgroud)

我把它保存到了redis

redis.hmset("test:key", mydict)
Run Code Online (Sandbox Code Playgroud)

但恢复后

stored = redis.hgetall("test:key")
print(str(stored))
Run Code Online (Sandbox Code Playgroud)

我觉得很奇怪{b'test': b'test11'}所以stored.get("test")给我没有

mydictstr方法结果看起来很好{'test': 'test11'}.那么,为什么这个二进制标记添加到恢复数据?我还检查了redis-cli并且没有看到明确的b标记.hgetall出了什么问题?

redis python-3.x redis-py

12
推荐指数
3
解决办法
8628
查看次数

Postgresql全文搜索标记器

刚遇到问题.我正在尝试在本地化内容(特别是俄语)上设置全文搜索.问题是默认配置(以及我的自定义)不处理字母案例.例:

SELECT * from to_tsvector('test_russian', '?? ????? ????????? ????? ???????? ?????????');
> '??':1 '?????':4 '?????????':6 '?????????':3 '????????':5 '?????':2
Run Code Online (Sandbox Code Playgroud)

'На'是一个禁用词,应该删除,但它甚至不会在结果向量中降低.如果我传递小写字符串,一切正常

SELECT * from to_tsvector('test_russian', '?? ????? ????????? ????? ???????? ?????????');
> '?????':4 '?????????':6 '?????????':3 '????????':5 '?????':2
Run Code Online (Sandbox Code Playgroud)

当然,我可以传递预先小写的字符串,但手动说

简单字典模板通过将输入标记转换为小写字母并针对停用字文件进行检查来进行操作.

Config russian_test看起来像这样:

create text search CONFIGURATION test_russian (COPY = 'russian');

CREATE TEXT SEARCH DICTIONARY russian_simple (
    TEMPLATE = pg_catalog.simple,
    STOPWORDS = russian
);

CREATE TEXT SEARCH DICTIONARY russian_snowball (
    TEMPLATE = snowball,
    Language = russian,
    StopWords = russian
);

alter text search …
Run Code Online (Sandbox Code Playgroud)

postgresql full-text-search tokenize

6
推荐指数
1
解决办法
1219
查看次数

.net Distinct()和复杂的条件

假设我有一堂课

public class Audio
{
    public string artist   { get; set; }
    public string title    { get; set; }
    // etc.
}
Run Code Online (Sandbox Code Playgroud)

现在我想通过相似性(不是完全匹配)条件来过滤这些音频列表中的重复项.基本上它是Levenstein距离,通过字符串总长度进行阈值校正.问题是,关于IEqualityComparer的一般提示是"始终实现GetHashCode和Compare".我无法在GetHashCode中计算字符串之间的距离,因为它根本不是比较方法.但是在这种情况下,即使是类似的音频也将返回不同的哈希值,而Distinct()会将其视为不同的对象,而compare()方法则不会触发.

我试图强制GetHashCode总是返回0,所以Compare调用集合中的每个对象,但这很慢.所以,最后,一个问题:我可以用.net开箱即用,或者我应该搜索一些好的过滤算法?

.net c# distinct duplicates

5
推荐指数
1
解决办法
270
查看次数

SetWindowsHookEx不会对媒体键做出反应

我想捕获用户键盘输入以对键盘媒体键做出良好反应:播放/暂停,特别是下一个和上一个.我尝试使用低级WH_KEYBOARD_LL参数的SetWindowsHookEx来确保我可以从这个WINAPI函数中获得最大的责任,而我什么都没有.如果我在钩子回调中设置断点,当我按下常规键(例如字母或F修饰符)时,调试器会在任何键盘事件上停止,但是当我按下其中一个媒体键(例如Play/Payse)时,它永远不会停止.我试着下载演示应用程序,它演示了SetWindowsHookEx的用法,但没有一个适用于MM键.我也读过这个相关的问题,但没有答案.

我用这段代码来设置钩子:

    private const int WH_KEYBOARD_LL = 13;
    private const int WM_KEYUP = 0x0101;
    private static LowLevelKeyboardProc _proc = HookCallback;
    private static IntPtr _hookID = IntPtr.Zero;

    public static IntPtr SetHook()
    {
        using (var curProcess = Process.GetCurrentProcess())
        {
            using (var curModule = curProcess.MainModule)
            {
                return SetWindowsHookEx(WH_KEYBOARD_LL, _proc, GetModuleHandle(curModule.ModuleName), 0);
            }
        }
    }

    public static void UnsetHook()
    {
        UnhookWindowsHookEx(_hookID);
    }

    private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);

    private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
    {
        if …
Run Code Online (Sandbox Code Playgroud)

c# winapi keyboard-hook

2
推荐指数
1
解决办法
1079
查看次数