mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 03:08:55 -05:00
Fix poor fuzzy results due to changes in rapidfuzz 3.0 (#6224)
Co-authored-by: aikaterna <20862007+aikaterna@users.noreply.github.com>
This commit is contained in:
parent
3ac2512c14
commit
dbb91dfce8
@ -7,7 +7,7 @@ import discord
|
|||||||
import lavalink
|
import lavalink
|
||||||
from red_commons.logging import getLogger
|
from red_commons.logging import getLogger
|
||||||
|
|
||||||
from rapidfuzz import process
|
import rapidfuzz
|
||||||
from redbot.core import commands
|
from redbot.core import commands
|
||||||
from redbot.core.i18n import Translator
|
from redbot.core.i18n import Translator
|
||||||
from redbot.core.utils import AsyncIter
|
from redbot.core.utils import AsyncIter
|
||||||
@ -116,7 +116,9 @@ class LocalTrackUtilities(MixinMeta, metaclass=CompositeMetaClass):
|
|||||||
to_search_string = {
|
to_search_string = {
|
||||||
i.local_track_path.name for i in to_search if i.local_track_path is not None
|
i.local_track_path.name for i in to_search if i.local_track_path is not None
|
||||||
}
|
}
|
||||||
search_results = process.extract(search_words, to_search_string, limit=50)
|
search_results = rapidfuzz.process.extract(
|
||||||
|
search_words, to_search_string, limit=50, processor=rapidfuzz.utils.default_process
|
||||||
|
)
|
||||||
search_list = []
|
search_list = []
|
||||||
async for track_match, percent_match, __ in AsyncIter(search_results):
|
async for track_match, percent_match, __ in AsyncIter(search_results):
|
||||||
if percent_match > 85:
|
if percent_match > 85:
|
||||||
|
|||||||
@ -7,7 +7,7 @@ import discord
|
|||||||
import lavalink
|
import lavalink
|
||||||
from red_commons.logging import getLogger
|
from red_commons.logging import getLogger
|
||||||
|
|
||||||
from rapidfuzz import process
|
import rapidfuzz
|
||||||
from redbot.core import commands
|
from redbot.core import commands
|
||||||
from redbot.core.i18n import Translator
|
from redbot.core.i18n import Translator
|
||||||
from redbot.core.utils import AsyncIter
|
from redbot.core.utils import AsyncIter
|
||||||
@ -132,7 +132,9 @@ class QueueUtilities(MixinMeta, metaclass=CompositeMetaClass):
|
|||||||
track_title = track.title
|
track_title = track.title
|
||||||
|
|
||||||
tracks[queue_idx] = track_title
|
tracks[queue_idx] = track_title
|
||||||
search_results = process.extract(search_words, tracks, limit=50)
|
search_results = rapidfuzz.process.extract(
|
||||||
|
search_words, tracks, limit=50, processor=rapidfuzz.utils.default_process
|
||||||
|
)
|
||||||
search_list = []
|
search_list = []
|
||||||
async for title, percent_match, queue_position in AsyncIter(search_results):
|
async for title, percent_match, queue_position in AsyncIter(search_results):
|
||||||
if percent_match > 89:
|
if percent_match > 89:
|
||||||
|
|||||||
@ -6,7 +6,7 @@ from typing import Iterable, List, Mapping, Tuple, Dict, Set, Literal, Union
|
|||||||
from urllib.parse import quote_plus
|
from urllib.parse import quote_plus
|
||||||
|
|
||||||
import discord
|
import discord
|
||||||
from rapidfuzz import process
|
import rapidfuzz
|
||||||
|
|
||||||
from redbot.core import Config, commands
|
from redbot.core import Config, commands
|
||||||
from redbot.core.commands import Parameter
|
from redbot.core.commands import Parameter
|
||||||
@ -324,7 +324,9 @@ class CustomCommands(commands.Cog):
|
|||||||
- `<query>` The query to search for. Can be multiple words.
|
- `<query>` The query to search for. Can be multiple words.
|
||||||
"""
|
"""
|
||||||
cc_commands = await CommandObj.get_commands(self.config.guild(ctx.guild))
|
cc_commands = await CommandObj.get_commands(self.config.guild(ctx.guild))
|
||||||
extracted = process.extract(query, list(cc_commands.keys()))
|
extracted = rapidfuzz.process.extract(
|
||||||
|
query, list(cc_commands.keys()), processor=rapidfuzz.utils.default_process
|
||||||
|
)
|
||||||
accepted = []
|
accepted = []
|
||||||
for key, score, __ in extracted:
|
for key, score, __ in extracted:
|
||||||
if score > 60:
|
if score > 60:
|
||||||
|
|||||||
@ -32,7 +32,7 @@ from typing import (
|
|||||||
import aiohttp
|
import aiohttp
|
||||||
import discord
|
import discord
|
||||||
from packaging.requirements import Requirement
|
from packaging.requirements import Requirement
|
||||||
from rapidfuzz import fuzz, process
|
import rapidfuzz
|
||||||
from rich.progress import ProgressColumn
|
from rich.progress import ProgressColumn
|
||||||
from rich.progress_bar import ProgressBar
|
from rich.progress_bar import ProgressBar
|
||||||
from red_commons.logging import VERBOSE, TRACE
|
from red_commons.logging import VERBOSE, TRACE
|
||||||
@ -154,7 +154,13 @@ async def fuzzy_command_search(
|
|||||||
choices = {c: c.qualified_name for c in commands}
|
choices = {c: c.qualified_name for c in commands}
|
||||||
|
|
||||||
# Do the scoring. `extracted` is a list of tuples in the form `(cmd_name, score, cmd)`
|
# Do the scoring. `extracted` is a list of tuples in the form `(cmd_name, score, cmd)`
|
||||||
extracted = process.extract(term, choices, limit=5, scorer=fuzz.QRatio)
|
extracted = rapidfuzz.process.extract(
|
||||||
|
term,
|
||||||
|
choices,
|
||||||
|
limit=5,
|
||||||
|
scorer=rapidfuzz.fuzz.QRatio,
|
||||||
|
processor=rapidfuzz.utils.default_process,
|
||||||
|
)
|
||||||
if not extracted:
|
if not extracted:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user