noahsettersten
commited on
Commit
•
b3d858d
1
Parent(s):
d4a9888
feat: Create `code_vectors` table
Browse files
lib/medical_transcription/code_vector.ex
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
defmodule MedicalTranscription.CodeVector do
|
2 |
+
use Ecto.Schema
|
3 |
+
alias Ecto.Changeset
|
4 |
+
alias MedicalTranscription.Repo
|
5 |
+
|
6 |
+
import Ecto.Query
|
7 |
+
import Pgvector.Ecto.Query
|
8 |
+
|
9 |
+
schema "code_vectors" do
|
10 |
+
field :code, :string
|
11 |
+
field :description, :string
|
12 |
+
field :description_vector, Pgvector.Ecto.Vector
|
13 |
+
end
|
14 |
+
|
15 |
+
def changeset(code_vector, params \\ %{}) do
|
16 |
+
code_vector
|
17 |
+
|> Changeset.cast(params, [:code, :description, :description_vector])
|
18 |
+
|> Changeset.validate_required([:code, :description, :description_vector])
|
19 |
+
end
|
20 |
+
|
21 |
+
def insert_vector(params) do
|
22 |
+
changeset = changeset(%__MODULE__{}, params)
|
23 |
+
|
24 |
+
case Repo.insert(changeset) do
|
25 |
+
{:ok, _} ->
|
26 |
+
{:ok, "Success!"}
|
27 |
+
|
28 |
+
{:error, changeset} ->
|
29 |
+
messages =
|
30 |
+
Ecto.Changeset.traverse_errors(changeset, fn {msg, opts} ->
|
31 |
+
Enum.reduce(opts, msg, fn {key, value}, acc ->
|
32 |
+
String.replace(acc, "%{#{key}}", to_string(value))
|
33 |
+
end)
|
34 |
+
end)
|
35 |
+
|
36 |
+
{:error, messages}
|
37 |
+
end
|
38 |
+
end
|
39 |
+
|
40 |
+
def exists_for_code?(code) do
|
41 |
+
Repo.exists?(
|
42 |
+
from v in __MODULE__,
|
43 |
+
where: v.code == ^code
|
44 |
+
)
|
45 |
+
end
|
46 |
+
|
47 |
+
def find_similar(search_vector, limit \\ 5) do
|
48 |
+
Repo.all(
|
49 |
+
from v in __MODULE__,
|
50 |
+
order_by: cosine_distance(v.description_vector, ^search_vector),
|
51 |
+
limit: ^limit
|
52 |
+
)
|
53 |
+
end
|
54 |
+
end
|
priv/repo/migrations/20240125151833_create_code_vectors.exs
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
defmodule MedicalTranscription.Repo.Migrations.CreateLabelVectors do
|
2 |
+
use Ecto.Migration
|
3 |
+
|
4 |
+
def change do
|
5 |
+
create table("code_vectors") do
|
6 |
+
add :code, :string
|
7 |
+
add :description, :string
|
8 |
+
add :description_vector, :vector, size: 384
|
9 |
+
end
|
10 |
+
end
|
11 |
+
end
|