قائمة رمز ICD-9 في تنسيق XML أو CSV أو قاعدة البيانات [مغلق
سؤال
أبحث عن قائمة كاملة من رموز ICD-9 (الرموز الطبية) للأمراض والإجراءات بتنسيق يمكن استيراده إلى قاعدة بيانات والرجوع إليه برمجيًا. سؤالي هو نفسه بالضبط مثل تبحث عن موارد لرموز ICD-9, ، لكن الملصق الأصلي أهمل أن يذكر أين "حصل على" قائمته الكاملة بالضبط.
من المؤكد أن Google ليست صديقي هنا لأنني قضيت عدة ساعات في غوغرة المشكلة ووجدت العديد من قوائم أنواع النص الغنية (مثل مركز السيطرة على الأمراض) أو مواقع الويب حيث يمكنني التنقل إلى القائمة الكاملة بشكل تفاعلي ، لكن لا يمكنني العثور على مكان الحصول عليها القائمة التي من شأنها ملء هذه المواقع ويمكن تحليلها في قاعدة بيانات. أعتقد أن الملفات هنا ftp://ftp.cdc.gov/pub/health_statistics/nchs/publications/icd9-cm/2009/ احصل على ما أبحث عنه ولكن الملفات هي تنسيق نص غني وتحتوي على الكثير من القمامة والتنسيق الذي سيكون من الصعب إزالته بدقة.
أعلم أن هذا يجب أن يكون قد تم القيام به من قبل الآخرين وأحاول تجنب تكرار جهد الشعوب الأخرى ، لكنني لا أستطيع العثور على قائمة XML/CSV/Excel.
المحلول 2
بعد إزالة RTF ، لم يكن من الصعب تحليل الملف وتحويله إلى CSV. الملفات المحلية الناتجة التي تحتوي على جميع رموز ICD-9 لعام 2009 للأمراض والإجراءات موجودة هنا: http://www.jacotay.com/files/disease_and_procedurecodes_parsed.zipالمحلل الخاص بي الذي كتبته هنا: http://www.jacotay.com/files/rtfapp.zip إنها في الأساس عملية من خطوتين - خذ الملفات من موقع CDC FTP ، وقم بإزالة RTF منها ، ثم حدد الملفات الخالية من RTF وحوضها في ملفات CSV. الكود هنا قاسي للغاية لأنني كنت بحاجة فقط للحصول على النتائج مرة واحدة.
فيما يلي رمز تطبيق التحليل في حالة انخفاض الروابط الخارجية (نهاية خلفية إلى نموذج يتيح لك تحديد اسم ملف وانقر فوق الأزرار لجعله)
Public Class Form1
Private Sub btnBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowse.Click
Dim p As New OpenFileDialog With {.CheckFileExists = True, .Multiselect = False}
Dim pResult = p.ShowDialog()
If pResult = Windows.Forms.DialogResult.Cancel OrElse pResult = Windows.Forms.DialogResult.Abort Then
Exit Sub
End If
txtFileName.Text = p.FileName
End Sub
Private Sub btnGo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGo.Click
Dim pFile = New IO.FileInfo(txtFileName.Text)
Dim FileText = IO.File.ReadAllText(pFile.FullName)
FileText = RemoveRTF(FileText)
IO.File.WriteAllText(Replace(pFile.FullName, pFile.Extension, "_fixed" & pFile.Extension), FileText)
End Sub
Function RemoveRTF(ByVal rtfText As String)
Dim rtBox As System.Windows.Forms.RichTextBox = New System.Windows.Forms.RichTextBox
'// Get the contents of the RTF file. Note that when it is
'// stored in the string, it is encoded as UTF-16.
rtBox.Rtf = rtfText
Dim plainText = rtBox.Text
Return plainText
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim pFile = New IO.FileInfo(txtFileName.Text)
Dim FileText = IO.File.ReadAllText(pFile.FullName)
Dim DestFileLine As String = ""
Dim DestFileText As New System.Text.StringBuilder
'Need to parse at lines with numbers, lines with all caps are thrown away until next number
FileText = Strings.Replace(FileText, vbCr, "")
Dim pFileLines = FileText.Split(vbLf)
Dim CurCode As String = ""
For Each pLine In pFileLines
If pLine.Length = 0 Then
Continue For
End If
pLine = pLine.Replace(ChrW(9), " ")
pLine = pLine.Trim
Dim NonCodeLine As Boolean = False
If IsNumeric(pLine.Substring(0, 1)) OrElse (pLine.Length > 3 AndAlso (pLine.Substring(0, 1) = "E" OrElse pLine.Substring(0, 1) = "V") AndAlso IsNumeric(pLine.Substring(1, 1))) Then
Dim SpacePos As Int32
SpacePos = InStr(pLine, " ")
Dim NewCode As String
NewCode = ""
If SpacePos >= 3 Then
NewCode = Strings.Left(pLine, SpacePos - 1)
End If
If SpacePos < 3 OrElse Strings.Mid(pLine, SpacePos - 1, 1) = "." OrElse InStr(NewCode, "-") > 0 Then
NonCodeLine = True
Else
If CurCode <> "" Then
DestFileLine = Strings.Replace(DestFileLine, ",", ",")
DestFileLine = Strings.Replace(DestFileLine, """", """).Trim
DestFileText.AppendLine(CurCode & ",""" & DestFileLine & """")
CurCode = ""
DestFileLine = ""
End If
CurCode = NewCode
DestFileLine = Strings.Mid(pLine, SpacePos + 1)
End If
Else
NonCodeLine = True
End If
If NonCodeLine = True AndAlso CurCode <> "" Then 'If we are not on a code keep going, otherwise check it
Dim pReg As New System.Text.RegularExpressions.Regex("[a-z]")
Dim pRegCaps As New System.Text.RegularExpressions.Regex("[A-Z]")
If pReg.IsMatch(pLine) OrElse pLine.Length <= 5 OrElse pRegCaps.IsMatch(pLine) = False OrElse (Strings.Left(pLine, 3) = "NOS" OrElse Strings.Left(pLine, 2) = "IQ") Then
DestFileLine &= " " & pLine
Else 'Is all caps word
DestFileLine = Strings.Replace(DestFileLine, ",", ",")
DestFileLine = Strings.Replace(DestFileLine, """", """).Trim
DestFileText.AppendLine(CurCode & ",""" & DestFileLine & """")
CurCode = ""
DestFileLine = ""
End If
End If
Next
If CurCode <> "" Then
DestFileLine = Strings.Replace(DestFileLine, ",", ",")
DestFileLine = Strings.Replace(DestFileLine, """", """).Trim
DestFileText.AppendLine(CurCode & ",""" & DestFileLine & """")
CurCode = ""
DestFileLine = ""
End If
IO.File.WriteAllText(Replace(pFile.FullName, pFile.Extension, "_parsed" & pFile.Extension), DestFileText.ToString)
End Sub
الطبقة النهائية
نصائح أخرى
توفر مراكز خدمات Medicaid & Medicare ملفات Excel التي تحتوي فقط على الرموز والتشخيص ، والتي يمكن استيرادها مباشرة إلى بعض قواعد بيانات SQL ، وتحويل SANS.
ملفات excel المضغوطة ، حسب رقم الإصدار
(تحديث: رابط جديد استنادًا إلى التعليق أدناه)
يتم شحن مركز خدمات Medicare (CMS) بالفعل بـ ICD ، لذلك أعتقد أن إصدارات CDC التي تشير إليها قد تكون مجرد نسخ أو نسخ معالجة. فيما يلي صفحة Medicare (التي يصعب العثور عليها) والتي أعتقد أنها تحتوي على البيانات الأولية الأصلية ("مصدر الحقيقة").
http://www.cms.gov/medicare/coding/icd9providerdiagnosticcodes/codes.html
يبدو الأمر كما هو الحال في هذا المنشور ، أحدث إصدار هو V32. سيحتوي تنزيل ZIP الذي تحمله على 4 ملفات نصية عادي تقوم بها رمز الخريطة إلى الوصف (ملف واحد لكل مجموعة من diag | proc و Short | long). كما أنه يحتوي على ملفين excel (واحد لكل منهما لـ DIAG_PROC) الذي يحتوي على ثلاثة أعمدة لذا خريطة رمز إلى على حد سواء الأوصاف (طويلة و قصيرة).
من الواضح أن موضوعًا قديمًا جدًا لكنني قمت مؤخرًا بتنفيذ هذه المهمة وكتبتها هنا مع روابط إلى بيانات المصدر -
http://colinwhite.net/dropplets/icd
كنت أحاول الحصول على كل من ICD-9 و ICD-10 في قاعدة بيانات SQLite.
يبدو أنه عمل بشكل جيد.
يمكنك الحصول على ملفات رمز RTF Orginal من هناhttp://ftp.cdc.gov/pub/health_statistics/nchs/publications/icd9-cm/2009/